Nr. 1/86 Januar
DM 6.50, sfr 6.50, 6S 50, Lit 5900, hfl 7.50
Quicksort A
Vokabeltrainer _ um‘
NT
ProDOS-Konverter a y u r
NN
ARTE
Im
tm 4422
SYSTEMAUFBAU DATENBANK TEXTBEARBEITUNG -ACCESS II - DATENFERN-
SCHREIBTISCHMANAGER -RECHENBLATT ÜBERTRAGUNG - SYSTEMINFORMATIONEN
V.BOTTA / CHR.LANGE / K. ZIMMERMANN V.BOTTA / CHR.LANGE / K. ZIMMERMANN
e-1Li e-1ni
Band 1: and 2:
Einleitung . Einleitung
Was Sie benötigen 2. Was Sie benötigen
Starten von APPLE WORKS 3. Starten von APPLE WORKS
Der Schreibtischmanager 4. Der Schreibtischmanager
. Datenbank 5. Textbearbeitung
6. Rechenblatt . Datenfernübertragung
Al Anschluß der Festplatte ProFile ... Ab wie Band 1. dazu:
A2 APPLE II Easy Pieces Referenz A7 Modemkabel für APPLE Ile. IIc
A3 Druckeranpassungen A8 SuperSerialCard: Einstellung
A4 DOS 3.3 Konvertierungen A9 ASCII-Textdateien aus anderen
A5 APPLE WORKS Disketten sichern
kopieren A10 DATEX-P20O F Verzeichnis
A6 Hilfsfunktionen nach Programmteilen All Deutsche/Englische Menübilder
von ACCESS II
Von Botta/Lange/Zimmermann je 264 Seiten,
Softcover, je DM 49,-
APPLE WORKS auf APPLE II, Ile, Ilc:
verwandelt APPLE-II-Computer in einen Elektroni-
schen Schreibtischmanager mit:
Texterstellung ...Edition, Briefarchiv, Ausdruck etc.
Datenarchivierung ... Kontoführung, Buchhaltung
etc. Formblattkalkulation ...Bilanzen, VisiCalc-
Dateien etc. Datenfernübertragung ...Mailbox,
Rechnerkopplung etc.
@ ist ein erfolgreicheres Integrationspaket als LOTUS
auf IBM PC!
® ist auf 1 MByte Speichererweiterungen Ihres
APPLE II vorbereitet!
® erschließt Ihnen die Zukunftstechnik MAILBOX!
® ist ebenso einfach zu bedienen wie APPLE
WRITER:
Kein Befehlsstudium ...Einfachste Menü-
führung ... Sofortige Anwendbarkeit
te-wi’s APPLE WORKS SYSTEMBÜCHER 1+2
zeigen Ihnen:
@ Sämtliche APPLE WORKS Funktionen an Beispie-
len aus der Wirtschaft
® Das Wechseln zwischen Text/Rechenblatt/Daten-
archiv/Dfü
® Umfassende Systeminformationen zu Dateikonver-
tierung, Druckeranpassung etc.
te-wi Verlag GmbH
“
Theo-Prosel-Weg 1 eat
8000 München 40
Weitere te-wi-Bücher
Das Net,
APPLE II/il+/IIe/lIIc-Handbuch
(L. Poole)
Erst mit Hilfe dieses Leitfadens werden Sie
Ihren Apple Il erfolgreich einsetzen. denn
Text und Bildmaterial gehen weit über das
hinaus. was herstellerseitig an Literatur
angeboten wird.
Neu überarbeitet und jetzt um die spezifi-
Deere Schen Eigenheiten der Modellelle undlI c
nu erweitert. 472 Seiten. Softcover. DM 66.-
LOGO -
Jeder kann programmieren
» (Daniel Watt)
Buch des Jahres in den U SA. Für die
Computer APPLE II, C-64, IBM PC,
E ATARI bis 520 ST., TI-99 und Schneider
LPES:
Hochwertiges Textbuch für Logo-Kurse
zu Hause und im Lehrbereich.
384 Seiten. A4, DM 59,
APPLE
MASCHINEN
SPRACHE
APPLE Il - Bewegte 3D-Graphik Don mmanxurrnman | Apple Maschinensprache
(Phil Cohen)
Selbstentworfene Graphiken und Dia
gramme — animiert oder als Standbilder
eben oder räumlich: alle erforderlichen
BASIC-Programme mit Erklärung finden
Sie in diesem Buch.
200 Seiten. Softcover. DM 49,
NEr,
Reparaturanleitung Computer:
Apple Il, Iplus
Einzigartige Serviceunterlage für Reparatu-
ren und Entwicklungsarbeiten am Apple Il.
Enthält Schaltpläne. Bauteile- und Ver-
gleichstypenliste: Prüfpunkte mit Oszillo-
grammen der Signalformen., Logiktabellen.
Spannungsangaben: schnelle Servicetests:
Anleitung zur systematischen Fehlersuche.
Für BASIC-Programmierer der einfachste
„-.| Zugang zur Muttersprache des APPLE. Wesent:-
| lich schnellere Maschinenprogramme, direkte
Manipulation des Mikroprozessors 6502 im
"Te APPLE - als Brücke dorthin benötigt dieses
am Buch nur die drei BASIC-Befehle POKE.
sn CALL. PEEK.D. Inman/K. Inman. DM 49.-
Erstes deutsches Referenzwerk sämt
licher Befehle und Systemroutinen von
Apple II. IIplus. Ile
APPLE II PASCAL 47
Betriebssystem €, U
Betriebssystem. 272 S.. DM 49.-
Sprache. 216 S.. DM 39.-
Pascal 1.2 Addendum. 112 S.. DM 36.-
Grundlagenbuch. Bestseller
APPLE PASCHL,
In A4-Mappe. DM 29,50
Eine praktische Anleitung.
544 S.. DM 59.-
Noch im Programm: Macintosh Programmierhandbuch mit MSBASIC 2.0
Computer für Kinder, APPLE Il, DM 29,80 (Ende ’85), DM 59,-
6502 Programmieren in Assembler, DM 59,- Einführung in die Mikrocomputer-Technik, DM 66,-
Umweltdynamik (Prospekt anfordern), DM 66,- (NEU) M68000-Familie, 2 Bände, DM 79,- und DM 69,-
©O JAHRE
FACHLITERATUR
Über 40 erfolgreiche Fachzeitschriften und ein
großes Fachbuchprogramm für Wirtschaft, Wis-
senschaft und Technik erscheinen bei der Ver-
lagsgruppe Dr. Alfred Hüthig. Sie sind unerläßlich
zur aktuellen Information und beruflichen Weiter-
bildung der Fachleute in den Bereichen:
Aerosole - Chemie - Makromolekulare Chemie -
Chromatographie - Computeranwendung im La-
bor - Metall - Gummi - Kautschuk - Kunststoffe -
Kosmetika - Parfümerie - Elektronik - Elektrotech-
nik - CAD, CAM - Elektrohandwerk - Elektrohan-
del - Energietechnik - Beleuchtungstechnik - Hob-
byelektronik - EDV - Mikrocomputer - Fernsehen
- Kinotechnik - Nachrichtenelektronik - Radio- und
Fernsehtechnik - Unterhaltungselektronik - Krimi-
nalistik - Sicherungstechnik - Recht - Verwaltung
- Bundesbahn - Kunsthandel - Schuhtechnik -
Verpackung und Zahnmedizin.
Hucthi
1925 - 1985
‚ : =
Probehefte und Fachbuchpröspekte erhäiten Sie beit
Dr. Alfred Hüthig Verlag, Postf. 102869, 6900 Heidelberg
Die Peeker-Redaktion befindet sich übrigens in der zweiten Etage ganz links
Impressum
Peeker
3. Jahrgang 1986
ISSN 0176-9200
© für den gesamten Inhalt
einschließlich der Programme
Dr. Alfred Hüthig Verlag,
Heidelberg 1986
Verleger und Herausgeber:
Dipl.-Kfm. Holger Hüthig
Geschäftsführung Zeitschriften:
Heinz Melcher
Chefredakteur: Ulrich Stiehl (us)
Redaktion: Harald Grumser
Sekretariat, Tel. (06221) 4892 31
Bestellungen, Tel. (06221) 4892 78
Anzeigenleitung:
Jürgen Maurer, Tel. (06221) 489218
z. Zt. gilt Anzeigenpreisliste Nr. 4
Vertriebsleitung:
Walter Menzel, Tel. (06221) 489280
Produktionsleitung: Gunter Sokollek
Gestaltung: Rainer Schmitt
Illustrationen: Hannes Pohle
DEEKE
it
Heft 1/1986
Grundlagen
Wie funktioniert Quicksort?
Mit einem Demonstrationsprogramm
von Ulrich Stiehl
Utility
Quicksort
Eine superschnelle Applesoft-Erweiterung
von Harald Grumser
Schule
Vokabeltrainer
Vokabeln lernen mit dem Apple Il
von Thomas Zink
Grafik
Applesoft-HGR-Erweiterung
in Assembler
von Klaus Schäfer
ProDOS
: PROTODOS
Konvertierung von ProDOS-
in DOS-3.3-Dateien
von Arne Schäpers
UCSD
Designer
Zeichensatz-Generator
in Apple-Pascal
von Gabor Herr
Turbo
READPAS
Konvertierung von UCSD-
in Turbo-Pascal-Textfiles
von Michael Erperstorfer
Verlag: Erscheinungsweise: 12 Hefte jährlich,
Erscheinungstag jeweils 1 Woche vor Monatsbeginn.
Jahresabonnement DM 72,-, einschließlich MwSt,
im Inland portofrei. Einzelheft DM 6,50
Dr. Alfred Hüthig Verlag GmbH
Im Weiher 10, Postfach 102869
6900 Heidelberg
Telefon (06221) 489-1
Telex 4-6 1727 hued d.
Telefax (06221) 489279
BTX * 51851 #
Vertrieb Handel:
Breslauer Str. 5, Postfach 1123,
8057 Eching b. München,
Tel. 089/319 1067, Telex 0522 656
16
20
°10
36
43
48
MZV - Moderner Zeitschriften Vertrieb GmbH
Kyan
Kyan-Pascal
Ein vollcompilierendes
6502-Pascal
Erfahrungsbericht
von Herbert Pohl
Praxis
50
Der Apple Il als Werkzeug
für den Betriebswirt
Teil 1: Das Simplex-Verfahren
in der Controller-Praxis
von Dipl.-Betriebswirt Willy Holtkamp 96
Hobby
Grafik-Demonstrationen
Teil 2
von Ralf Knoke
Testberichte
61
Video-Clips für jedermann
Die Video-1000-Karte
Erfahrungsbericht
von Norbert Man Brandl 63
The Write Choice
Ein preiswertes Textverarbeitungsprogramm
Erfahrungsbericht
von Franz-Josef Hüskens 66
Hard- und Software zum Apple IlIc
zusammengestellt von Matthias Pohl 67
Ampersoft
Eine Ampersand-Utility-Sammlung
Kurzbericht
von Franz-Josef Hüskens 68
Buchbesprechungen
69
Inserentenverzeichnis 70
Zahlungen: an den Dr. Alfred Hüthig Verlag
GmbH, D-6900 Heidelberg 1: Postgiro-
konten: BRD: Karlsruhe 485 45-753;
Österreich: Wien 7555888; Schweiz: Basel
40-24417; Niederlande: Den Haag 145728;
Italien: Mailand 47718; Belgien:
Brüssel 723026; Dänemark: Kopenhagen
34969; Norwegen: Oslo 994 24;
Schweden: Stockholm 5477 76-5
Bankkonten: Landeszentralbank Heidel-
berg 67 207 341; BLZ 67200000; Deutsche
Bank Heidelberg 02165041; BLZ
67270003; Bezirkssparkasse Heidelberg
20451, BLZ 67250020.
Herstellung: Heidelberger Verlagsanstalt
Printed in Germany
von Ulrich Stiehl
Mit einem Demonstrationsprogramm
Anfang der sechziger Jahre entwickelte
ein englischer Informatiker namens C.A.R.
Hoare ein neuartiges Sortierverfahren, das
1962 in einer Computerfachzeitschrift un-
ter der Bezeichnung „Quicksort“ vorge-
stellt wurde. Es sollte sich als der bislang
beste Sortieralgorithmus erweisen. Wie al-
le genialen Algorithmen scheint auch
Quicksort dem Lernenden zunächst un-
überwindlich kompliziert zu sein. Hat man
den Algorithmus jedoch erst einmal ver-
standen, dann enthüllt er sich als verblüf-
fend einfach.
1. Sortieren und Vergleichen
Der Begriff des Sortierens ist nicht so ein-
fach, wie man gemeinhin denkt.
Alphabetische Sortierung
Betrachten wir zunächst das Alphabet.
Liegen beispielsweise die Buchstaben des
Abc sortiert vor? „A“ ist ein Vokal, „B“ ein
Labial, „C“ ein kombinierter Konsonant
(„I + „Z*), „D“ ein Dental, „E“ wieder
ein Vokal usw. Von einer Sortierung kann
keine Rede sein! Wer zufällig einmal ein
Wörterbuch der altindischen Sprache
Sanskrit in die Hand bekommen sollte,
wird zu seinem Erstaunen feststellen, daß
die alten Inder das richtig sortierte Alpha-
bet erfunden haben. Zunächst kommen
die Vokale und dann die Konsonanten, die
jeweils in sich exakt teilsortiert sind. Die
Dentale sind beispielsweise in der Reihen-
folge „T, TH, D, DH, N“ angeordnet. „T“
ist der stimmlose Dental, „TH“ der stimm-
los aspirierte Dental, „D“ der stimmhafte
Dental, „DH“ der stimmhaft aspirierte
Dental, und schließlich ist „N“, wofür es
ein spezielles Zeichen gibt, dasjenige
Dental-N, das einem anderen Dental vor-
ausgeht. Das „N“ in „Ente“ spricht man
nämlich anders als das „N“ in „Anker“
aus, denn bei „Ente“ steht ein Dental-N
vor dem Dental-T und bei „Anker“ ein
Guttural-N vor dem Guttural-K. Eines kön-
nen wir auf jeden Fall festhalten: Wer auch
immer das lateinische Alphabet erfunden
hat, muß eine Vorliebe für „chaotisches
Sortieren“ gehabt haben.
Numerische Sortierung
Auch die Sortierung von Zahlen ist nicht
so eindeutig, wie man zunächst annehmen
möchte. Die Folge
Me
wird man gemeinhin als aufsteigend sor-
tiert bezeichnen. Wie steht es hingegen
mit der Folge
739, 1341, 522, 1862,
die in einem Intelligenztest-Buch von
H.J.Eysenck steht? Ist sie nach einem
„geheimen Verfahren“ sortiert? Tatsäch-
lich gibt es in der höheren Mathematik
„sortierte“ Reihen, die man landläufig we-
der als aufsteigend noch absteigend be-
zeichnen würde.
Sonstige Sortierung
Noch undurchsichtiger wird der Begriff
des Sortierens, wenn weder Wörter noch
Zahlen sortiert werden sollen. Wie kann
man beispielsweise die Shapes eines Gra-
fikspiels sortieren: nach der Anzahl der
Bits, nach der Richtung der Vektoren, nach
der Wirkung auf den Spieler? Hier wie
Peeker 1/86
auch bei den Wörtern und Zahlen müssen
jeweils spezielle „Größer-Kleiner-
Gleich“-Vergleichskriterien festgelegt
werden. Für die alphabetische Sortierung
„nach Duden“ gilt u.a. (Beispiele):
„A“ < „B“
„a = ,„A"
„a =,„A"
„B’ = ,S5"
„” = nichts
„AA“ < „AB“
USW.
Dem Sortieren liegt also ein Vergleichs-
prozeß zugrunde, der von den Vergleichs-
Kriterien bestimmt wird. Ob eine Sortie-
rung richtig oder falsch ist, hängt damit
allein von den Vergleichskriterien ab, die
ihrerseits völlig willkürlich festgelegt sein
können, wie das lateinische Alphabet
zeigt.
2. Sortieren und Tauschen
Unter Sortieren verstehen wir die Neuan-
ordnung einer bestimmten Anzahl von
Elementen nach zuvor festgelegten Ver-
gleichskriterien. Programmtechnisch wer-
den praktisch immer Arrays (= dimensio-
nierte oder Feldvariablen) sortiert, und
zwar bei Mikrocomputern üblicherweise
im internen Speicher (= internes Sortie-
ren im RAM) und nur ausnahmsweise im
externen Speicher (= externes Sortieren
direkt auf dem Datenträger = Diskette
usw.). Betrachten wir hierzu das folgende
Applesoft-Programm-Fragment:
10W (1) = 25
20 W (2) = 30
30 W (8) = 10
Hier umfaßt der Array W nur 3 Elemente,
nämlich
1. Element mit Wert 25,
2. Element mit Wert 30,
3. Element mit Wert 10.
Dabei ist zu unterscheiden zwischen der
Nummer eines Elements (1., 2., 3.) und
dem Wert eines Elements (25, 30, 10). Die
Nummer eines Elements heißt auch Index
und ist mathematisch gesehen eine Ordi-
nalzahl = Ordnungszahl (Gegensatz: Kar-
dinalzahl = Grundzahl).
Würden die 3 Werte 25, 30 und 10 als 3
entsprechend bezifferte Karteikärtchen
vorliegen, so könnte man diese auf dem
Tisch mit einem „flotten Griff“ so verdre-
hen, daß sich sofort die aufsteigend sor-
tierte Folge 10, 25, 30 ergeben würde.
Bei einem Sortierprogramm muß statt des
„flotten Griffs“ stets ein paarweiser
Tausch vorgenommen werden, wobei in
Applesoft in Ermangelung eines SWAP-
oder direkten Tauschbefehls sogar ein in-
direkter Tausch über eine Zwischen- oder
Dreieck-Tauschvariable T erfolgen muß.
Wie ersichtlich, sind bei unserem Array 2
Tauschoperationen erforderlich, um die
GRUNdlAgEeN 4.4
gewünschte aufsteigende Sortierung her-
beizuführen:
Vorher:
W(i)=235
W (2) = 30
W (3) = 10
Erster Tausch von
1. und 3. Element:
T=W()
W()=W (3)
W(68)=T
Danach:
W(1)=10
W (2) = 30
W(3) =25
Zweiter Tausch von
2. und 3. Element:
T=W (2)
W (2) =W (3)
W(63)=T
Danach
W(1)=10
W (2) = 25
W (3) = 30
Wert- und Indextausch
Da die Werte hier physisch vertauscht
wurden, sprechen wir auch vom Wert-
tausch. Das Gegenstück dazu ist der In-
dextausch. Da indes der Index oder die
Feldnummer nur als „Offset“, d.h. als rela-
tiver oder errechneter Abstand zum Be-
ginn eines Arrays, und mithin gar nicht
physisch existiert, muß zu diesem Zweck
neben dem Wert-Array W ein Index-Array |
eingeführt werden, der zunächst wie folgt
initialisiert wird:
I(1)=1
I(2)=2
I(3) =3
Dies besagt, daß der Index-Array | anfangs
als Werte die Nummern des Wert-Arrays
W übernimmt. Nach Beendigung der Sor-
tierung gilt für den Index-Array:
I(1)=3
I(2)=1
I(3)=2
Beispielsweise enthält das 1. Element des
Index-Arrays I den Wert 3 und zeigt damit
auf das 3. Element des Wert-Arrays W, das
den Wert 10 enthält, so daß gilt:
W(I(1)) =W (3) = 10
Wenn man anstelle des Wert-Arrays den
entsprechenden Index-Array sortiert, so
bleibt die ursprüngliche Reihenfolge der
Elemente des Wert-Arrays erhalten. Neh-
men wir an, Sie hätten eine Kundendatei
(Wert-Array), wobei jedem Kunden eine
logische Suchnummer vergeben wurde,
die der Nummer (= dem Index) des jewei-
ligen Datensatzes (= Wert-Elements) ent-
spricht. Durch physische Vertauschung
der Wert-Elemente würden die logischen
Suchnummern verlorengehen. Deshalb
7
1071
Tabellarisches Quicksort-Protokoll
ı 35 43 98 66 54 31 94 83 32 72 56
: 01 02 03 04 05 06 07 08 09 10 11
: 72 43 98 66
: 72 43 29
: 12 43 29
: 72 43 29
: 72 43 29
: 45 43 29
: 01 02 03
: 01 02 03
: 45
: 45
: 01
: 97
: 45
: 45
: 01
: 93
: 45
45
: 01
: 01
, 45
: 45
: 01
: 18 43 29 66
: 18
91
: 18
: 18
:-18
: 18
: 01
: 01
: 18
: 18
: 01
0
: 18
: 18
: 01
: 18
: 18
18
: 01
: 18
: 18
: 01
: 18
54 31 94 83
66 94 83
43 29
43 29
02 03
02 03
43 29
43 29
02 03
02 03
43 29
43 29
02 03
02 03
43 29
43 29 54
02 03 04 05 06
54 31
43 29 66 54 31
02 03 04 05 06
45 29 66
45 29 27
45 29 27
32 29 27
02 03 04
02 03 04
32 29 27
32 29 27
02 03 04
02 03 04
32 29 27
32 29 27 35 31
02 03 04 05 06
35 29 27 32 31
35 29 27 32 31
34 29 27 32 31
02 03 04 05 06
27 29 34 32 31
27 29 34 32 31
02 03 04 05 06
27 34 29 32 31
: 18 27 31 29 32 34 35 43 54 56
02 03 04 05 06 07 08 U 17
18 27 29 31 32 34 35 43 54 56
: 18 27 29 31 32 34 35 43 54 56
01 02 03 04_05 06 07 08 10 11
18 27 29 31 32 34 35 43 54 56
18 27 29 31 32 34 35 43 54 56
18 27 29 31 32 34 35 43145154 56
27
12
71 81 45 34
14 15 16
81] 45
45
45
45
81
81
15
15
86
81
19
15
81
90 29 unsortiert
19 20 Mitte 10,V:72
90 29 Ersttausch
90 98 Tausch
90 98 Tausch
90 98 Tausch
90 98 Tausch
90 98 Letzttausch
19 20 Stack,F:15,L:20
19 20 Mitte 17,V:86
90 98 Ersttausch
90 98 Letzttausch
19 20 Stack,F:15,1L:16
19 20 Mitte 15,V:81
90 98 Ersttausch
90 98 Letzttausch
19 20 Stack,F:18,1:20
18 19 20 Mitte 19,V:90
90 94 98 Ersttausch
90 94 98 Letzttausch
19 20 Stack,F:19,L:20
19 20 Mitte 19,V:94
94 98 Ersttausch
94 98 Letzttausch
19 20 Mitte 7,V:18
98 Ersttausch
98 Letzttausch
20 Mitte 7,V:45
98 Ersttausch
98 Tausch
98 Tausch
98 Letzttausch
20 Stack,F:10,L:13
20 Mitte 11,V:56
94 98 Ersttausch
94 98 Letzttausch
18 19 20 Stack,F:12,L:13
18 19 20 Mitte 12,V:66
6 90 94 98 Ersttausch
94 98 Letzttausch
20 Mitte 5,V:35
98 Ersttausch
98 Tausch
Letzttausch
Mitte 4,V:27
Ersttausch
Letzttausch
Mitte 4,V:34
Ersttausch
Letzttausch
Mitte 4,V:29
Ersttausch
Letzttausch
Mitte 4,V:31
Ersttausch
Letzttausch
98 sortiert
Peeker 1/86
MEN 3 —;, »peeker« bietet Ihnen was!
| |
Wer jetzt schenkt hat mehr von seinem Apple.
Dafür schenkt »peeker« Ihnen etwas: Den prakti-
MAGAZIN FÜR APPLE-COMPUTER song e” die Speicherkapazität Ihrer
Trickfilmgrafik |
> aka | Sie wissen ja, wie gut der »peeker« Ihnen im täg-
| Print-Using | lichen Umgang mit Ihrem Apple behilflich ist. Und
| Sie brauchen Ihren »peeker« nicht mehr zu teilen
oder auszuleihen.
Der blaue Disketten-Locher ist unser Geschenk an
Sie für einen neuen »peeker«-Abonnenten. Denn
wer einen Apple hat, der soll auch seinen »peeker«
haben. RER
Pascal-Compiler
Premium-Softcard
si nam
Peeker 1/86
ch bin der neue Abonnent. Bitte liefern Sie mir bis Coupon ausschneiden und
auf Widerruf, zumindest aber für 1 Jahr, »peeker«
zum Jahresbezugspreis von DM 72,- (Ausland plus einsenden an:
DM 18,- Porto) an folgende Anschrift:
Name, Vomme 7 »peeker«
Abonnementservice
Bestellcoupon
D Er ERBE IN
6900 Heidelberg 1
Datum, Unterschrift
Gewünschte Zahlungsweise
[] gegen Rechnung
[] bargeldlos durch Bankeinzug
Ich habe den neuen Abonnenten geworben und er-
halte kostenlos den Disk-Locher. Kantor Banazen)
Geldinstitut Bw
Komme een Vertrauensgaräntie:
Diese Bestellung kann ich innerhalb einer Woche
bei Dr. Alfred Hüthig Verlag GmbH, Im Weiher 10, .. .
Straße, Postfach 6900 Heidelberg 1 widerrufen. Zur Wahrung der Hüch
| Frist genügt die rechtzeitige Absendung. Ich be- PUBLIKATION
PLZ, Ort stätige die Kenntnisnahme mit meiner Unterschrift:
Datum, Unterschrift 2. Unterschrift
wären hier die Indizes (= Zeiger) und nicht
die Werte zu sortieren.
3. Sortieren mit Bubblesort
Bei der Folge
1.08
2. 30
3.10
haben wir „auf den ersten Blick“ erkannt,
daß 10 die kleinste Zahl ist; folglich haben
wir 10 mit 25 vertauscht, damit 10 zum
kleinsten Element wurde. Danach haben
wir bei
1.10
2.30
3.25
„auf den zweiten Blick“ erkannt, daß 25
die zweitkleinste Zahl ist; folglich haben
wir 30 mit 25 vertauscht, womit 30 zum
drittkleinsten (= größten) Element wurde.
Dieses „intuitive Sortierverfahren“ ist
nicht nur für den Computer, sondern — bei
größeren Mengen von zu sortierenden
Elementen — auch für den Menschen völlig
ungeeignet. Sie glauben mir nicht? Dann
unterbrechen Sie bitte die Lektüre dieses
Aufsatzes und suchen Sie einmal, nach-
dem Sie sich das heutige Datum notiert
und vorsorglich eine Krankmeldung an Ih-
ren Arbeitgeber geschickt haben, das fünf-
zigkleinste Wort aus diesem Peeker-Heft
heraus. ... Wieviele Tage sind seit Beginn
der „Suchaktion“ verstrichen?
Holzhammer und Köpfchen
Sieht man einmal von der intuitiven Me-
thode ab, so lassen sich die Sortierverfah-
ren in zwei Gruppen einteilen:
a) Holzhammer-Algorithmus
b) Köpfchen-Algorithmus.
Da Programme in Assembler bis zu hun-
dertmal schneller als in BASIC oder Pascal
sind, bedient man sich in anderen Berei-
chen häufig primitiver, aber sehr schneller
Assembler-Programme. Bei Sortierpro-
grammen versagen jedoch die Holzham-
mer-Verfahren, denn es läßt sich leicht
nachweisen, daß ein Quicksort-Programm
in Applesoft schneller als ein Bubblesort-
Programm in Assembler ist, z.B. wenn ein
Array mit 1000 Zahlen sortiert werden soll.
Betrachten wir zu diesem Zweck den Bub-
blesort oder die „Blasensortierung“ als
das primitivste Holzhammer-Verfahren.
Der Bubblesort durchläuft wiederholt alle
Elemente vom ersten bis zum vorletzten
und vergleicht dabei jeweils das nächste
Elements (X + 1) mit dem momentanen
Element (X). Wenn das nächste Element
kleiner als das momentane ist, werden
beide Elemente vertauscht. Die Sortierung
wird beendet, wenn bei einem (= dem
10
letzten) Durchlauf keine Vertauschung
mehr erforderlich war. Beispiel anhand un-
serer 3 Zahlen:
Erster Durchlauf
1.23
2. 30
3.10
2. mit 1. Element vergleichen (V1)
30 < 25: nein, kein Tausch
3. mit 2. Element vergleichen (V2)
10 < 30: ja, tauschen (T1)
Es wurde getauscht, also weiter.
Zweiter Durchlauf
1:29
2.10
3.30
2. mit 1. Element vergleichen (V3)
10 < 25: ja, tauschen (T2)
3. mit 2. Element vergleichen (V4)
30 < 25: nein, kein Tausch
Es wurde getauscht, also weiter.
Dritter Durchlauf
1.10
2.25
3.30
2. mit 1. Element vergleichen (V5)
25 < 10: nein, kein Tausch
3. mit 2. Element vergleichen (V6)
30 < 25: nein, kein Tausch
Es wurde nicht getauscht, also Ende.
Insgesamt waren hier nur 2 Tauschopera-
tionen (T2) und 6 Vergleichsoperationen
(V6) erforderlich. In Wirklichkeit ist der
Bubblesort, bei dem mit jedem Durchlauf
die nächstgrößere Zahl wie eine Blase (=
bubble) im Wasser nach oben transportiert
wird, das ineffizienteste Sortierverfahren
überhaupt.
Die Effizienz eines Sortierverfahrens
hängt von der Anzahl der Tausch- und
Vergleichsoperationen ab. Als Faustregel
können Sie davon ausgehen, daß Sie für
das Sortieren eines Arrays mit 1000 Ele-
menten beim Bubblesort mit ca. 1.000.000
Vergleichen und bei Quicksort mit 10.000
Vergleichen rechnen müssen. Damit ist
der Quicksort — wiederum als Faustregel —
etwa 100mal schneller als der Bubblesort.
Daraus erhellt zugleich, daß ein Assem-
bler-Bubblesort kaum eine Chance gegen
einen Applesoft-Quicksort hat.
4. Sortieren mit Quicksort
Vorsortierung
Angenommen, Sie hätten die unangeneh-
me Pflicht, 10.000 Adreß-Karteikärtchen
manuell nach dem Alphabet zu sortieren.
Dann würden Sie sicherlich zunächst eine
Vorsortierung vornehmen, indem Sie ge-
trennte „Häufchen“ mit den „A“-Adres-
sen, „B“-Adressen usw. anlegen würden.
Das sich dann beispielsweise ergebende
„S"-Häufchen würden Sie ferner in „ST”-
und „SCH“-Teilhäufchen zerlegen usw.
Jedes der Häufchen würde einen Bereich
(= Abschnitt) darstellen, der insgesamt
alphabetisch kleiner oder größer als die
anderen Häufchen ist, d.h. alle Kärtchen
des „B“-Häufchens sind z.B. kleiner als
die Kärtchen des „C“-Häufchens, aber
größer als die Kärtchen des „A“-Häuf-
chens. Doch sind die Kärtchen des „B"-
Häufchens zunächst noch nicht in sich
sortiert.
Mechanische Zerlegung
Quicksort arbeitet nach dem soeben skiz-
zierten Prinzip der Aufteilung oder Zerle-
gung in Bereiche (englisch „partition“),
doch werden die Bereiche nicht nach
sachlichen Kriterien, sondern rein mecha-
nisch gebildet. Bei alphabetischer Sortie-
rung sind die Buchstaben-Häufchen sach-
lich begründbar, obwohl Sie sehr schnell
merken werden, daß manche Anfangs-
buchstaben extrem häufig (z.B. „S“) und
andere extrem selten (z.B. „Y“) vorkom-
men. Wenn Sie jedoch 10.000 Zahlen,
deren „Streuung“ Sie nicht kennen, ma-
nuell zu sortieren hätten, dann würden Sie
feststellen, daß man bei größeren
Datenmassen nur mit einer mechanischen
Aufteilung weiterkommt, zumal ein Com-
puter mit „sachlichen Kriterien“ ohnehin
nichts anfangen kann.
Quicksort-Protokoll
Betrachten wir nunmehr die Tabelle, die
die aufsteigende Sortierung von 20 Zu-
fallszahlen im Werttausch-Verfahren
Schritt für Schritt nachvollzieht. In der lin-
ken Spalte befinden sich die Zeilennum-
mern
01:
02:
usw. bis
Sr;
Zeile 1 enthält 20 unsortierte Zahlen
01: 35, 43, 98...,
während Zeile 2 die Nummern (= Indizes)
der Zahlen
02:01, 02, 03...
angibt.
Bis zur ersten Teilung
Betrachten wir nun die Zeile 1 mit den 20
Ausgangswerten. Zunächst ist dieser Be-
reich 1-20 noch ungeteilt, wobei das 1.
Element das linke oder untere Begren-
zungselement und das 20. Element das
rechte oder obere Begrenzungselement
darstellt. Wie gelangen wir nun zur ersten
Peeker 1/86
Indem man eine willkürliche
Teilung?
Halbierung vornimmt. Dies löst jedoch
noch nicht das Problem des Aufteilungs-
kriteriums. Quicksort vollzieht daher fol-
genden mechanischen Dreierschritt:
a) Zuerst wird ein sich etwa in der Mitte
vom linken und rechten Begrenzungsele-
ment befindliches sog. mittleres Element
selektiert, und zwar hier das 10. Element
(s. Zeile 2, rechter Rand). Man beachte,
daß dieses mittlere Element später nicht
notwendigerweise die Teilungsgrenze für
die zwei Hälften darstellen wird.
b) Dann wird der Wert dieses mittleren
Elements (hier 72, s. Zeile 2, rechter
Rand) willkürlich zum Vergleichswert er-
klärt.
c) Schließlich wird der Wert des mittleren
Elements mit dem Wert des linken, unter-
sten Elements vertauscht. Konkret heißt
dies hier, daß der Wert 72 des 10. Ele-
ments mit dem Wert 35 des 1. Elements
ausgetauscht wird (s. Zeile 3). Der Sinn
dieses sog. Ersttausches hängt mit dem
„Durchdrehen“ des Algorithmus zusam-
men (S.u.).
Es ergibt sich damit in Zeile 3 folgende
neue Ausgangssituation: Ein Vergleichs-
wert (72) ist aufgrund des mittleren (10.)
Elements bestimmt worden, und das un-
terste (1.) Element ist mit dem mittleren
(10.) Element vertauscht worden. Wir be-
trachten weiterhin die Zeile 3:
Aufsteigendes Suchen: Da das unterste
Element bereits durch den Ersttausch vor-
läufig „abhackt“ worden ist, suchen wir ab
dem zweituntersten (hier 2.) Element von
links nach rechts einen Wert, der dem
Vergleichswert größer/gleich ist. Die 43
als Wert des 2. Elements ist nicht größer
als der Vergleichswert 72, wohl aber die
98 als Wert des 3. Elements.
Absteigendes Suchen: Nachdem wir die
98 gefunden haben, suchen wird ab dem
obersten (hier 20.) Element von rechts
nach links einen Wert, der dem Ver-
gleichswert kleiner/gleich ist. Dies ist hier
gleich bei dem 20. Element der Fall, des-
sen Wert 29 kleiner als der Vergleichswert
72 ist.
Normaler Tausch: Nachdem wir aufstei-
gend bzw. absteigend jeweils einen Wert
gefunden haben, der größer/gleich bzw.
kleiner/gleich in bezug auf den Ver-
gleichswert ist, vertauschen wird diese ge-
fundenen Werte. Das heißt hier konkret,
daß die 98 mit der 29 vertauscht wird. Die
erfolgte Vertauschung ist aus der Zeile 4
ersichtlich.
Peeker 1/86
Weitere Suche: Da die 98 das 3. Element
und die 29 das 20. Element waren, setzen
wir unsere aufsteigende Suche mit dem 4.
Element und die absteigende Suche mit
dem 19. Element fort. Wir finden dann die
Werte 94 (7. Element) und 18 (18. Ele-
ment), deren erfolgte Vertauschung aus
der Zeile 5 hervorgeht. Die Zeile 6 belegt
noch die Vertauschung von 83 (8. Ele-
ment) und 34 (16. Element) sowie die
Zeile 7 die Vertauschung von 81 (14. Ele-
ment) und 45 (15. Element).
Letzttausch: Wenn man jetzt, nachdem
man von links beim 14. Element und von
rechts beim 15. Element angelangt ist, die
Suche fortsetzt, überkreuzen sich die
Nummern der Elemente. Deshalb been-
den wir mit der ersten Überkreuzung
(Überlappung) das Suchen und vertau-
schen nunmehr den Wert des 14. Ele-
ments (45), der sich beim absteigenden
Suchen ergab, mit dem Wert des 1. Ele-
ments (72), das vom Ersttausch herrührte
und gleichzeitig während des gesamten
Suchvorgangs den Vergleichswert dar-
stellte. Wenn nämlich der beim überlap-
pend absteigenden Suchen gefundene
Wert 45 kleiner als der Vergleichswert 72
ist und das 1. Element den Vergleichswert
beinhaltet, dann können wir getrost 45 mit
72 vertauschen, womit der Vergleichswert
72 als 14. Element seine endgültige Po-
sition erhält. Das Ergebnis des Letzttau-
sches ist aus Zeile 8 ersichtlich.
Was haben wir damit erreicht?
1. Der Bereich der Elemente 1-13 enthält
jetzt nur noch Werte, die dem Wert des 14.
Elements, d.h. dem Vergleichswert, klei-
ner oder gleich sind.
2. Der Bereich der Elemente 15-20 enthält
jetzt nur noch Werte, die dem Wert des 14.
Elements, d.h. dem Vergleichswert, grö-
Ber oder gleich sind.
3. Der Wert des 14. Elements, d.h. der
Vergleichswert, ist bereits endgültig, d.h.
die Position des 14. Elements wird sich bei
den nachfolgenden Teilungen und Such-
vorgängen nicht mehr ändern. Damit ha-
ben wird zwei vorsortierte Teilbereiche ge-
wonnen, nämlich den Bereich 1-13 sowie
den Bereich 15-20, denn der Bereich 1-13
ist in bezug auf den Bereich 15-20 insge-
samt kleiner oder gleich. Die zwei Teilbe-
reiche sind jedoch noch nicht in sich sor-
tiert.
4. Man beachte, daß die Teilung nicht di-
rekt mit dem mittleren Element zusam-
menhängt. Aufgrund des mittleren (10.)
Elements hätten sich die Teilbereiche 1-9
und 11-20 ergeben. In Wirklichkeit sind wir
jedoch bei den Teilbereichen 1-13 und 15-
20 angelangt.
E GRUNdlAgeN PP
Bevor Sie nun weiterlesen, sollten Sie den
bisherigen Ablauf anhand der Zeilen 1-8
nochmals nachvollziehen. Wir wiederho-
len den Algorithmus in Kurzform:
1. Bereichsgrenzen (Unter- und Ober-
grenze) ermitteln; in Zeile 2 durch halbfett
gedruckte Ziffern ersichtlich.
2. Mittleres Element willkürlich auswählen
und dessen Wert zum Vergleichswert er-
klären; s. Zeile 2 rechts: Mitte: 10, V(er-
gleichwert): 72.
3. Wert des untersten Elements mit dem
Wert des mittleren Elements vertauschen;
Ss. Zeile 3: Ersttausch.
4. Ab dem zweituntersten Element nach
rechts aufsteigend und ab dem obersten
Element nach links absteigend jeweils ein
Element suchen, das größer-gleich/klei-
ner-gleich als der Vergleichswert ist.
Wenn die aufsteigende/absteigende Su-
che noch zu keiner Überlappung geführt
hat, Werte der Elemente vertauschen und
weitersuchen und -tauschen; s. Zeilen 4-
7: normaler Tausch.
5. Andernfalls Wert des untersten Ele-
ments mit dem Wert des absteigend-über-
lappenden Elements vertauschen; s. Zeile
8: Letzttausch.
Nach der ersten Teilung
Das Quicksort-Motto lautet: Was man das
erste Mal getan hat, kann man auch das
zweite Mal tun („Rekursionsprinzip“).
Folglich wenden wir exakt denselben Al-
gorithmus nunmehr auf die zwei Teilberei-
che 1-13 und 15-20 an. Dies hört sich
jedoch leichter an, als es in der Program-
mierpraxis ist, denn wir müssen uns natür-
lich diejenigen Bereiche merken, die mo-
mentan nicht bearbeitet werden. In der
Zeile 9 sind die Ziffern 1 und 13 halbfett
markiert: Diese stellen die Begrenzungen
des Bereichs dar, der zunächst gemerkt
werden muß, und zwar auf dem Stack (=
Stapel = Keller; im Applesoft-Demo-Pro-
gramm als Pseudo-Stack-Array realisiert).
In Zeile 9 rechts außen finden wir die
Bemerkung
Stack, F:15, L:20,
die besagt, daß bei dem momentanen Be-
reich das 15. das unterste (F = first) und
das 20. das oberste (L = last) Begren-
zungselement sind.
Sie werden sich nunmehr drei Fragen
stellen:
1. Wie tief wird geteilt? Antwort: Bis ein
Teilbereich nur noch aus zwei oder einem
einzigen Element besteht. Aus Gründen
der Übersichtlichkeit wird bei unserer Ta-
belle die jeweils letzte Aufteilung, bei der
das untere mit dem oberen Begrenzungs-
element identisch ist, nicht angezeigt. In
diesen Fällen enthält der Stack vorüberge-
hend 2 gleiche Element-Nummern.
11
2. Wann ist die Sortierung abgeschlos-
sen? Antwort: Wenn alle Teilbereiche
komplett abgearbeitet worden sind, d.h.
wenn der Stack wieder leer ist.
3. Wie tief muß der Stack sein? Antwort:
Wenn wir einen Pseudo-Stack-Array mit
beispielsweise DIM SS% (30) anlegen
und jeweils 2 Elemente für Unter- und
Obergrenze eines „gemerkten“ Teilbe-
reichs benötigen, so können 15 „gemerk-
te“ Teilbereiche auf den Stack geschoben
werden. In der Praxis ist dies für ca. 1000
zu sortierende Elemente selbst bei „entar-
teten Folgen“ stets ausreichend. Betrach-
ten Sie hierzu die Zahl 1024: Einmal halbi-
ert (= 2 Grenzwerte auf dem Stack), ergibt
sich 512, danach 256, 128, 64, 32 usw. Da
man sich bei nicht ganz „mittigen“ Teilun-
gen immer den größeren (= mehr Ele-
mente umfassenden) Bereich merkt und
mit dem kleineren (= weniger Elemente
umfassenden) Bereich fortfährt, kann der
Stack nie überlaufen. Jetzt wird uns auch
der Grund für das mysteriöse „mittlere
Element“ klar: Theoretisch könnte man
jedes beliebige Element des Teilungsbe-
reichs als Vergleichswert herauspicken.
Durch Selektion des mittleren Elements in
Verbindung mit der Weiterbearbeitung der
jeweils kleineren Bereiche befinden sich
bei n (z.B. 1024) zu sortierenden Elemen-
ten im Stack niemals mehr als Ib n (z.B.
10) gemerkte Teilbereiche (Ib = Logarith-
mus zur Basis 2;2 T 10 = 1024).
Wenn Sie bei der Tabelle die Mitte-Zeilen
2, 10 und 28 betrachten, sehen Sie sehr
gut die T-Kreuz-Formen der Bereichstei-
lungen, wobei der senkrechte T-Strich das
jeweils endgültig positionierte Element an-
zeigt.
5. Anmerkungen zum
Demo-Programm
Das gelistete Demo-Programm QUICK-
‚RANDOM erzeugt bei jedem Durchlauf
eine neue Zufallszahlenfolge, während
das zusätzlich auf die Peeker-Sammeldisk
aufgenommene Demo QUICK.SPEZIAL
drei „entartete“ Zahlenfolgen vorführt.
Ferner enthält die Sammeldisk die TASC-
compilierbare Spezialversiin QUICK-
.TASC zur Geschwindigkeitsmessung.
Sentinel
Sentinel heißt Wachposten. So bezeichnet
man im Englischen die Begrenzungswerte
(Minimal- und Maximalwert). Beim aufstei-
genden und absteigenden Durchsuchen
eines Bereichs müssen Sie dafür Sorge
tragen, daß die Suche nicht nach unten
über den Anfangswert und nach oben über
den Endwert „absaust“.
12
Untere Begrenzung: Nenn wir das jeweils
unterste Element durch den Vergleichs-
wert ersetzen, kann die absteigende Su-
che niemals über das unterste Element
hinausgehen, denn der Vergleichswert ist
niemals kleiner als der Vergleichswert.
Obere Begrenzung: Wenn das oberste
Element mindestens dem größten Wert
des gesamten Arrays entspräche, könnte
die aufsteigende Suche niemals über das
oberste Element hinausgehen. Da es hier-
für jedoch keine Garantie gibt, muß man
entweder durch einen vorgeschalteten
einmaligen Bubblesort-Durchgang das
größte Element zum obersten Element
machen oder — wie bei unserem Demo-
Programm - ein weiteres Element (SN%
+ 1) mit dem maximalen Wert (hier 9999)
belegen. Selbst wenn alle anderen Ele-
mente den gleichen Wert 9999 hätten,
würde die Sortierroutine niemals „ab-
sausen“.
Unnötiger Erst/Letzttausch
Die Sentinel-Methode führt bei den klein-
sten Teilbereichen zu einem unnötigen
Erst- und Letzttausch. Betrachten wir hier-
zu in der Tabelle die Zeile 54 mit dem 2-
Element-Bereich vom untersten (4.) Ele-
ment (Wert 31) bis zum oberste (5.) Ele-
ment (Wert 32). Zunächst wird das 4. Ele-
ment als Vergleichswert erkoren. Da das
4. Element zugleich das unterste Element
dieses Bereichs ist, wird das 4. Element
mit dem 4. Element vertauscht (unnötiger
Ersttausch). Da bei der nachfolgenden
auf- und absteigenden Suche eine Über-
lappung stattfindet, wird erneut das 4. Ele-
ment mit dem 4. Element vertauscht (un-
nötiger Letzttausch).
Man muß hierzu jedoch wissen, daß jede
zusätzlich eingebaute Prüfung, die unnöti-
ge Vergleiche eliminiert, selbst in Form
eines Vergleichs programmiert werden
muß, der ebenfalls Zeit kostet, so daß eine
Verfeinerung der hier vorgestellten Ap-
plesoft-Quicksort-Implementierung kaum
zu Zeitgewinnen führen würde.
Sonderfälle
Das Demo funktioniert nur, wenn der zu
sortierende Array mindestens 2 Elemente
umfaßt. Ursprünglich für Zahlen-Arrays
gedacht, läßt sich das Programm leicht für
String-Quicksort umschreiben, indem man
die Hilfsvariablen T und SV durch T$ und
SV$ sowie den Array T (SN%) durch T$
(SN%) ersetzt.
Geschwindigkeit
Abschließend sei darauf hingewiesen, daß
die TASC-compiliette Version von
QUICK.TASC zum Sortieren eines Inte-
ger-Arrays mit 1000 Elementen ca. 17 Se-
kunden benötigt. Dagegen bringt es die
nicht-compilierte Applesoft-Version
QUICK.TASC nur auf 215 Sekunden. Der
TASC-Compiler bewirkt hier also eine
12fache Geschwindigkeitssteigerung. Die
Assembler-Quicksort-Routine von Harald
Grumser bewirkt nochmals eine 5fache
Steigerung gegenüber der bestmöglichen
TASC-Version.
Kurzhinweise
1. Zweck:
Demonstration von Quicksort.
2. Konfiguration:
Apple Ile/c/+ mit einer 80-Zeichenkarte,
die die Applesoft-Befehle INVERSE/NOR-
MAL erkennt; DOS 3.3 oder ProDOS.
3. Test:
RUN QUICK.RANDOM
RUN QUICK.SPEZIAL
RUN QUICK.TASC
RUN QUICK.DISK
4. Sammeldisk:
QUICK.RANDOM
QUICK.SPEZIAL
QUICK.TASC
QUICK.DISK
DB-MEISTER
Adreß- und Schemabriefprogramm
Der DB-Meister ist ein in Assembler ge-
schriebenes, ungewöhnlich schnelles, un-
kompliziertes und zugleich „narrensicheres“
Adreß-, Datei- und Schemabriefprogramm.
Technische Daten
— Recordlänge bis zu 230 Zeichen
560 bis 1000 Records pro Datendiskette
Maximal 25 Felder pro Record
Suche nach 3 Indexfeldern
Ausdruck der Dateien als Etiketten, Listen
und Schemabriefe (mit Felder- und Tasta-
tureinschüben an beliebigen Stellen des
Formbriefes)
normal kopierbare Programmadiskette, un-
terteilt in Hauptprogramme und diverse
Hilfsprogramme
— einsatzfähig auf Apple Ile und Ilc mit
2 Drives (1 Drive ebenfalls möglich)
Gesamtpreis 290,— (2 Disketten + ge-
drucktes Manual)
U. Stiehl
c/o Dr. A. Hüthig Verlag
Postfach 10 28 69 : 6900 Heidelberg
Peeker 1/86
QUICK.RANDOM
Erzeugt tabellarisches Sortierprotokoll
von 2® Zufallszahlen, die mit jedem RUN
neu erzeugt werden.
Laden mit LOAD QUICK.RANDOM
Entweder 8®-Zeichenkarte mit PR#3
einschalten oder
in Zeilen 76® und 788 Druckbefehle
für Fettdruck/Normaldruck statt
INVERSE/NORMAL einsetzen und
Drucker mit PR#1l einschalten.
Jeweils mit RUN neue Tabelle
generieren.
HOME : GOSUB 76ß:
PRINT "Quicksort-Demo von U.Stiehl";:
GOSUB 789: PRINT
REM 28 Zufallszahlen
SNZ = 20: DIM T(SN% + 1)
Z = ®: REM Zeilenzähler
GOSUB 800: FOR X = 1 TO SN%:
T(X) = INT (98 * RND (1)) + 19:
PRINT T(X);" ";: NEXT X:
PRINT "unsortiert"
GOSUB 199: REM Sortieren
GOSUB 800: FOR X = 1 TO SN?:
PRINT TIA):”" ":: NEXT X:
PRINT "sortiert"
END
Initialisierung
REM T(SN%+1)
Inkrement-'Sentinel' = maximaler Wert
T(SN% + 1) = 9999
REM Array von SF%=First Element
bis SL%=Last Element sortieren
SFZ = 1:SL% = SNZ
DIM SS%(39):SC% = ®
Bereich ermitteln ("Partition")
REM Wenn SF%>=SL% dann Stack prüfen
IF SF$ > = SLZ THEN 520
REM Dekrement-Zeiger SD%
vorläufig auf SL%+1l setzen
SD% = SLZ + 1
REM Inkrement-Zeiger SI%
auf SF% setzen
SIZ = SF%
REM Mittlere Positon SM% zwischen
SF% und SL% ermitteln
SMZ = INT ((SL% - SF%) / 2) + SF%:
GOSUB 569: REM Anzeige
Ersttausch
REM SM%-Wert zum Vergleichwert SV
machen und SM%-Wert mit SF%-Wert
tauschen; Ersttausch;
Dekrement-'"Sentinel' = minimaler Wert
SV = T(SM%) :T(SM%) = T(SF%):
T(SF%) = SV: GOSUB 629: GOSUB 7ß®:
REM Anzeigen
Inkrement und Dekrement
REM SI% erhöhen, solange T(SI%) < ST
SIZ = SIX + 1: IF T(SI%) < SV
THEN 349
REM SD% vermindern, solange T(SD%) > SV
SDE = SDZ - 1: IF T(SDZ) > SV
THEN 36%
REM Überkreuzen sich SI% und SD%?
IF SDZ < = SI% THEN GOTO 43%
Normaler Tausch
REM Wenn nein, momentanen SI%-Wert
mit SD%-Wert tauschen;
normaler Tausch
AT = TISIEN:T(5I2) = TIB3):
T(SD%) = TT: GOSUB 749: REM Anzeigen
GOTO 349
Letzttausch
REM Wenn ja, SF%-Wert durch SD%-Wert
und SD%-Wert durch SV ersetzen;
Letzttausch
T(SF%) = T(SD%):T(SDZ) = SV:
GOSUB 720: REM Anzeigen
Stack-Routine
REM Größeren Teilabschnitt ermitteln
IF SD% - SF% < SL% - SD% THEN 48®
REM SF% und SL% des neuen
Bereichs auf Stack schieben
SSZ(SCZ + 1) = SF%:
SSZ(SCZ + 2) SsD% - 1:
SF% = SD% + 1: GOTO 599
SSZ(SCZ + 1) = SDZ + 1:
SSZ(SCZ + 2) = SLZ:SLZ = SD - 1
REM Stack-Counter SC%Z um 2 erhöhen
Ssc% = SC% + 2: GOTO 249
REM SF% und SL% des letzten
Bereichs vom Stack holen
IF SC% > ® THEN SL% = SS%(SC%):
SF% = SSZ(SC% - 1):SC% = SC% - 2:
GOTO 249
REM Sortieren beendet,
wenn SC% = ® ist
RETURN
Tabelle anzeigen
REM *%*%* Anzeigen *%*%*
IF SC%A = ® GOTO 619
GOSUB 809: FOR Y = 1 TO SN%
FOR X = 1 TO SC%:
IF SS%(X) = Y THEN GOSUB 76:
X = SC%
NEXT : IF Y < 1® THEN PRINT "®";
PRINT Y;: GOSUB 7898: PRINT " ";:NEXT:
FRINT "Stack; #:":574:" L:":5L8
RETURN
GOSUB 809: FOR Y = 1 TO SN%
IF Y = SF% THEN GOSUB 769
IF Y < 18 THEN PRINT "9";
PRINT Y;
IF Y = SL% THEN GOSUB 78®
PRINT "=
NEXT : PRINT "Mitte ";SM%;",V:";SV
RETURN
GOSUB 809: FOR Y = 1 TO SN%:
IF Y = SM% OR Y = SF% THEN GOSUB 769
PRINT T(Y);: GOSUB 780: PRINT " ";:
NEXT Y: PRINT "Ersttausch": RETURN
GOSUB 808: FOR Y = 1 TO SN%:
IF Y = SF% OR Y = SD% THEN GOSUB 769
PRINT T(Y);: GOSUB 788: PRINT " ";:
NEXT Y: PRINT "Letzttausch": RETURN
GOSUB 809: FOR Y = 1 TO SN%:
IF Y = SI% OR Y = SD% THEN GOSUB 769
PRINT T(Y);: GOSUB 788: PRINT " ";:
NEXT Y: PRINT "Tausch": RETURN
INVERSE : GOTO 779: REM Dummy!!!
PRINT CHR$ (27); CHR$ (71);
F = 1: RETURN
IF F= ] THEN F = ®: NORMAL
GOTO 799: REM Dummy!!!
PRINT CHR$ (27); CHR$ (72);
RETURN
Z=2Z+ 1: IF Z< 19 THEN PRINT "9";
PRINT Z; ": ";: RETURN
Variablen
8208 REM SNZ=Dimension des Zahlenarrays
830 REM SF%=First=Anfang des Bereichs
840 REM SM%=Mitte des Bereichs
859% REM SL%=Last=Ende des Bereichs
860 REM SI%=Inkrement-Zeiger
870 REM SD%=Dekrement-Zeiger
880 REM SS%=Stack=Stapel
898 REM SC%=Stack-Counter
900 REM SV=Vergleichshilfsvariable
91® REM TT=Tauschhilfsvariable
928 REM T(SN%)=Zahlenarray
QUICK.SPEZIAL
Das analoge Programm QUICK.SPEZIAL,
das sich auf der Peeker-Sammeldisk
befindet, demonstriert 3 Spezial-
fälle von zu sortierenden Arrays:
a) aufsteigend vorsortierte Elemente
b) absteigend vorsortierte Elemente
c) völlig gleiche Elemente.
Apple und IBM
kompatible Computer
16K, Z80, Diskcontroler je. . . . . 75-
80 Zeichenkarte mit Softswitch
2 Zeichensätze . . . . 2....149,-
Motherboard 48K ohne Firmware . .419,-
Erphi-controler mit Autopatch . . . 300,-
Siemenslaufwerk F 122 . .. .. ....515,-
TEAC FD-55B 2 x 40 Track . . . .375,-
TEAC FD-55F 2 x 80 Track . . . .395,-
FD4 Spezialcontroler für Laufwerke
mit bis zu2x 80 Track . . . . ..120,—-
Drucker Star SG 10 . . . . 940,—
Monochrome Monitore . . . . ab 375,-
Farbmonitore . . . 2 202.....ab 998,-
Tastaturen für IBM und Apple . ab 330,-
Versand nur per Nachnahme oder Vorkasse.
Weiteres Zubehör für Apple und IBM gegen
frankierten Rückumschlag.
Preissenkung:
128K Karte (Saturn kompatibel) . 248,—
Preissenkung 4164-200 ns
Mindestabnahme 20 Stck... . . . . 2,50
Zusatzkarten und Motherboard ausnahmslos
deutsche Fertigung mit ausgesuchten Bauteilen.
Ulf Mohwinkel Electronic
Berliner Straße 73 Pf: 250 166
5090 Leverkusen Fettehenne
Telefon 0214/93781 od. 95060
Preisliste kostenlos
Katalog DM 2,-
in Briefm.
Unser Dezember-Angebot:
Profimax Ile, APPLE Ile kompatibel,
IBM-Look nur 1398.—-
Profimax Ill, APPLE II+ kompatibel,
2 Prozessoren IBM-Look nur 1098,—
Chinon-Laufwerk 051A nur 398.-
Video-Digitalisierer incl. Software nur 298.-
STAR sg-10, original, mit Serien-Nr. nur 998.-
Centronics-Interface, grafikfähig nur 118.-
D.O.S Computersysteme
der Partner für Schule, Hochschule, Forschung, Fertigung
Am Kühnbach 42, 7170 Schwäb. Hall 11
Tel. 07 91/5 1736
Vi
berlın ım Apple Il+ 354 «x
VIDEO-1000.
ITIZER ZUM APPLE IL
295; -DM
ung 384x288 Bildpunkte
F ecorder und Kamera
mezeit msec
nung auf HIRES-Seite
Eensoht&raustüfen, DoubpleHiresz Kursiiim-
ng etc auf Anfrage.
odisk gegen Einaendung von 10 DM oder V-Scheck.
P- .
o gratis. Versand oder beim Fachhändler.
Ing.Büro M,Fricke, Neue_Str.13 1000 Berlin 37
Telefon! 030 / sol 56 32
Peeker 1/86
AKUSTIK-KOPPLER - Dataphon 321
300 Baud Modem , nach CCITT Y.21 Standard,
m. FTZ-Nr. 18.13.191 7.00, Gebühren- und
anmeldefrei, Y24/RS-232 Standard-Schnittst.
nur DM 298,00
OMMUNIKAT = PLETT - PAKET
geeignet für Apple //+ und Apple //e:
I Dataphon s21d,
1 Anschlußkabel: V.24 zum Apple II-Game-I/O,
I Terminalprogramm: "HIB Modem-Transfer"
QUICK.DISK
Externes Sortieren
nur DM 349,00
Wenn eine Datei so groß ist, daß nicht einmal die
Sortierfelder (= Schlüssel) geschweige denn die Datensätze
selbst in den Speicher eingelesen werden können, muß man
-Lauf Testbericht i
für rn //+ und Apple //e anschlußf. im Gehäuse DM 498,00
extern auf der Diskette, Festplatte oder RAM-Disk sortieren. W.o. jedoch für Apple /Ic DM 569,00
Die nachfolgende QUICK.DISK-Routine gestattet das externe
Sortieren einer beliebig großen Random-Datei (2 1 15 Sätze).
Das Demo selbst, das unter DOS 3.3 und ProDOS funktioniert, laufwerke zum rpreis!
ist jedoch auf maximal 9999 Astellige Zahlen begrenzt, was ND 06 D, 2x 80 Track, 640 K-Byte formatiert DM 498,00
für die 64K-Karte-RAM-Disk ausreicht = 59.®@® Bytes.
Von der Verwendung eines normalen Diskettenlaufwerks muß DISK- PEL-STATION (APPLE //+., APPLE //e
dringend abgeraten werden, denn; dies würde bei 10.000 2x ND 06-D im Geh. + Auto-Patchcontr., 1,2 MB DM 1598,00
Zahlen Tage dauern. Die Sortierroutine eignet sich demnach
nur entweder für eine RAM-Disk oder eine Festplatte. AUTO-PATCH-CONTROLLER DM 298,00
1® TEXT : HOME : INVERSE : PRINT "QUICKSORT-DISK'": NORMAL
12 SB = 1: PRINT : INPUT "Wieviele Zahlen: ";SN: IC-Test-Karte (Testet ca. 500 verschiedene IC‘s) DM 398,00
SN = INT (SN): IF SN < 2 OR SN > 9999 GOTO 12
14 PRINT : PRINT e- EGPArLPARNLEN er nn ® ROTHER-Matri ie Super- er!
” ar Er en a Si M- 1009 (Matrixdrucker , RS-232 + Centronics) DM 429,00
18 FOR X = SB TO SN:TT = INT (9000 * RND (1)) + 1999: M- 1009 anschlußfertig an:
PL.= FL + Sr Apple //c (mit Drucker-Kabel) DM 529,00
20 PRINT CHRS (4)"WRITE Z,R"X: PRINT TT: NEXT X Apple //e (mit Oraphik-Interface und Kabel) DM 629,00
22 PRINT CHR$ (A)'"WRITE Z,R"X: PRINT 9999:
PRINT CHR$ (4)"CLOSE 2"
24 PRINT : PRINT "Stoppuhr ";: GET X$: PRINT CHR$ (7): Alle Preise inclusive der gesetzlichen Mehrwertsteuer.
GOSUB 36:X = PEEK (49168) Berechnung der Versandkosten erfolgt nach Entfernung und Gewicht.
26 IF PEEK ( - 16384) < 127 THEN CALL - 1959: GOTO 26 Fordern Sie noch heute unsere Gratispreisliste an'Wiederverkäufer bitte nur
28 PRINT : PRINT "Prüfsumme ermitteln...": srr1: ‘ .
PRINT CHR$ (4)"OPEN Z,L5": PRINT CHR$ (4)"READ Z,RB": schriftlich anfragen (Kopie der Gewerbeanmeldung beilegen!).
INPUT SN o
30 TV = Ö: FOR X = SB TO SN: PRINT CHR$ (4)"READ Z,R"X:
INPUT TT:P2 = P2 + TT: IF TV > TT THEN
PRINT CHR$ (4)"CLOSE Z": PRINT "Fehler": END
32 TV = TT: NEXT : PRINT CHR$ (4)"CLOSE Z":
PRINT Pl: PRINT P2
34 END
HIB Computerladen
Äuß. Bayreuther Str. 72 - Telefon: 0911 / 515 939
Postfach 21 01 25 - Telex: 17 - 911 8253
8500 Nürnberg 21 - Teletex: 2526 - 911 82 53
Unterroutine für externes Quicksort
36 PRINT "Sort-Anfang":
SF = SB:SL = SN: DIM SS(38):SC = 9
38 PRINT CHR$ (4)"OPEN Z,L5"
ad ON SF < SL GOTO 44: IF SC > ® THEN
SL = SS(SC):SF-= SS(SC — 1):SC = SC - 2: GOTO 49
42 PRINT CHR$ (A)"CLOSE Z": PRINT "Sort-Ende": RETURN
44 SD = SL + 1:SI = SF:SM = INT ((SL - SF) / 2) + SF
46 PRINT CHR$ (A)"READ Z,R"SM: INPUT TV:
PRINT CHR$ (A)"READ Z,R"SF: INPUT TT:
PRINT CHR$ (A)"WRITE Z,R"SM: PRINT TT:
PRINT CHR$ (A)"WRITE Z,R"SF: PRINT TV
48 SI = SI + 1: PRINT CHR$ (4A)"READ Z,R"SI:
INPUT TI: IF TI < TV THEN 48
50 SD = SD - 1: PRINT CHR$ (4)"READ Z,R"SD:
INPUT TD: IF TD > TV THEN 5®
52 IF SD > SI THEN PRINT CHR$ (4A)"WRITE Z,R"SI:
PRINT TD: PRINT CHR$ (A)"WRITE Z,R"SD:
PRINT TI: GOTO 48
54 PRINT CHR$ (A)"WRITE Z,R"SF: PRINT TD:
PRINT CHR$ (4A)"WRITE Z,R"SD: PRINT TV
56 IF SD - SF < SL - SD THEN
SS(SC + 1) = SD + 1:SS(SC + 2) = SL:
SL = SD - 1:SC = SC + 2: GOTO 49
SS(SC + 1) = SF:SS(SC + 2) = SD - 1:
Die ProDOS-Analyse
Version 1.0.1, 1.0.2, 1.1.1
von Arne Schäpers
1985, 470 S., kart.,
DM 68,-
ISBN 3-7785-1134-3
„Die ProDOS Analyse“ ist die umfangreichste und detail-
lierteste Darstellung, die jemals ein Apple-Betriebssystem
erfahren hat. Wer die „Innereien“ von ProDOS bis zum
letzten Byte, z. T. bis ins letzte Bit kennenlernen möchte,
braucht dieses Buch. Das komplette Betriebssystem (Urla-
5 der, MLI; Disk-Driver, RAM-Disk-Driver und Uhr-Routine)
00
14
SF = SD + 1:SC = SC + 2: GOTO 49
60 REM Für 9999 Zahlen ca. 1 Stunde Sortierzeit
unter ProDOS + RAM-Disk + Accelerator
Bemerkung:
Die Sortierzeiten wären in der Praxis unvertretbar. Des-
halb kommen anstelle des externen Sortierens in der
Regel Misch- oder Merge-Programme zum Einsatz.
Hierüber wird in einem gesonderten Peeker-Aufsatz
berichtet.
‘
mit Ausnahme des BASIC-SYSTEM wird mit umfangrei-
chen Kommentaren und Übersichtstabellen disassem-
bliert. Dabei werden alle bisherigen Versionen von 1.0.1
bis 1.1.1 berücksichtigt. „Die ProDOS-Analyse“ be-
schreibt erstmals auch mehrere Programmierfehler, die bis
in die neueste Version zu finden sind. Auch die nicht im
„Technical Reference Manual” aufgeführten Eigenschaften
von ProDOS werden analysiert und beschrieben, z. B. die
vertrackten eingebauten Testroutinen zur Identifikation der
verschiedenen Apple-Il-Modelle und eventueller Nachbau-
geräte. Programmierer, die ProDOS versionsabhängig
„patchen“ möchten, erhalten hier den genauen Überblick,
wo was geändert werden muß, damit dies keine negativen
Konsequenzen hat. Durch die minutiöse theoretische Se-
zierung von ProDOS eröffnen sich völlig neue program-
mierpraktische Perspektiven.
Dr. Alfred Hüthig Verlag
6900 Heidelberg - Postfach 10 2860
Ze UNIVERSAL
m KEYBOARDS
Modell AN95SFE...DM 448,— ohne MwSt. (DM 510,72 incl. MwSt.)
Die KEYBOARDS SPEZIELL angepaßt für den APPLE Ile
Händleranfragen erwünscht
Ausgabe und
Eingabe mit
Ausgabe mi
TYPETERM®
JUNIOR
im Slot Ihres
APPLE Il/lle
Paketpreis DM 899,—
Schreibmaschine AX-10 mit
Interface TYPETERM JUNIOR,
TYPETERM®
im Slot Ihres
APPLE IlV/lle
Das bedeutet: Computer-
textverarbeitung von der
Schreibmaschinentastatur '!
Steckerfertig ohne Umbau. steckfertig.
TYPETERM- DM 479,-
Interface
für alle BROTHER-Typenrad- pi
schreibmaschinen ab CE-51 HELEN TÜR!
En = a a S e FLEXIBEL — ‚Jede Taste frei im EPROM programmierbar in
.. DM 1348, ann N, bis zu 8 Ebenen im iceleeren EPROM
CE-51 mit TYPETERM re e PROFESSIONELL — Für Anwender mit gehobenen Ansprüchen
CE-61 mit TYPETERM DM 1737,- e ERGONOMISCH — Nach DIN ULTRAFLACH gestaltetes stabiles
CE-70 mit TYPETERM i Gehäuse
EM-80 mit TYPETERM QUALITÄT AUS ERSTERHAND.__—— _ © KOMPLETT — Tastatur, Gehäuse und Kabel fertig montiert
TYPETERM-Kit für CE-50 DM 468,-
und getestet. Durch Spezial-Kabel und Spezial-
TYPETERM JUNIOR mit AX-10 - unser EPROM sofort einsteckfertig.
PeSSNSSIS ODENneS GESpahn, EREHIARE © KOMPAKT + FLACH — Durch Einsatz von „SIEMENS“ Flachtasten-
steckfertig. Mit TYPETERM JUNIOR kann modulen
die AX-10 mehr. Sie wird zum vollwertigen
Typenraddrucker für Ihren Apple:
@ 3 verschiedene Schriftstärken
gesellschaft für
compuftersteverungen
und datentechnik mbh
@ Automatisches Unterstreichen
@ 2 Zeichensätze z.B. deutsch u. ASCII
D-4930 Detmold # Alter Mühlenweg 5
Telefon O0 52 31/41 76 & Telex 935 660 acs d
Semian presents...
@ 2k ROM auf der Karte für Ausgabe unter
Cirtech Produkte für Apple Il
DOS, PRODOS, CP/M u. PASCAL.
e CP/M Plus System für Apple //c
TYPETERM - ein starkes Interface für
starke Maschinen! Alle Cursor- und Ctl-
Befehle. 4k ROM auf der Karte für DOS,
PRODOS, CP/M, PASCAL. 2 Zeichensätze
verfügbar z. B. deutsch u. ASCIl. Alle
Features: Hoch-/Tiefstellen, autom. Unter-
streichen, var. Zeichen und Zeilenabst.,
autom. Papierzuführung usw. Ausführl.
Handbuch vorab: 10,— DM auf Konto
14770-306 PGiroA Han (Anrechnung).
TYPETERM - ein Produkt von
eo
imerknrm Kock & Mreches GmbH
Postf., 3004 Isernhagen 4
electronic Telefon 05139-87393
TYPETERM JUNIOR - ein Produkt von
=
interkom re & Mreches GmbH
- ostf., 3004 Isernhagen 4
electronic Telefon 05139-87393
Achtung! Zusatzprogramm für AppleWNorks
DIESE ANZEIGE
wurde vollständig mit AppleWorks gedruckt. Dazu
benötigen Sie rur rıcch den DMP Charger, der
außerdem noch 20 weitere Zeichensätze für Sie
bereit hält.
Larıtnıs, /ts/ic, Schmasch,
ABHEPTHLKIMIT, OTEPNEXYZ
ATHENS VORDER /EIT
Auch vom MNordStar und anderen Programmen
können diese Zeichen benutzt werden. Sie Können
die Zeichen verändern, oder auch neue gestalten.
Das Programm arbeitet mit dem & //e (123K) oder
# //c und mit dem & lmagewriter, auch FX 50,
Panasonic, OKidata.
Preis: 19%,- incl. MwSt. und ausführlichem
Handbuch. Infoblatt kostenlos. Versand gegen
offerıe Rechnung möglich
Schreib,
Huımnmzeti og
rIorber t
Nottulner Landweg &1
D-44009 Münster
Tel.: 02534/ 7036 Telex: &72 496
auch bei Pandasoft und Intus erhältlich.
Peeker 1/86
CP/M Plus System mit Betriebssystem, Z80H (8MHz), 128K RAM, Maus-
Funktion, Drucker-Spooler mit 12K RAM, Tastatur-Spooler, Bildschirm
Dump zu jederzeit, Kompatibel zu CP/M 2.2 u. 2.23. Einsatz aller CP/M
Sprachen und Programme (MBASIC, WORDSTAR etc.).
K10 Apple //c CP/M Plus System Modul DM 998,00
K11 Apple //c CP/M Plus System Modul und WORDSTAR/
MAILMERGE DM 1498,00
e Champion Drucker Karte
Parallele Text- u. Graphik-Druckerkarte, 16 0. 64K RAM Puffer, 40/80 Z.
Dump, Einsatz von DOS, PRODOS, PASCAL, CP/M und auch Apple-
works, volle Apple //e Graphik, Serieller Ausbau möglich.
K32 Apple //+,e Champion Interface 16K RAM DM 459,00
DM 599,00
K33 Apple //+,e Champion Interface 64K RAM
e 80 Zeichen Karte mit 64K RAM
80-Zeichen Karte mit 64K RAM, voll Apple //e Graphik fähig.
K51 Apple //e 80-Zeichen Karte mit 64K RAM
e 1Megabyte RAM Karte
100 % Kompatibel mit PRODOS (Appleworks), DOS, PASCAL 1.3 und
CIRTECH CP/M Plus System, max. 6 Megabyte pro Apple //+,e, Einsatz
als RAM-Disk in jedem Slot möglich.
K70 Apple //+,e Flipper Karte mit 1MB RAM.
Händleranfragen willkommen!
M.Semjan
Computer Systeme
Postfach 90 01 64 : 6000 Frankfurt/M 90
Tel. 069-70 18 53 - Mo-Fr 10.30-15 Uhr
DM 359,00
DM 1798,00
Quicksort
Eine superschnelle Applesoft-Erweiterung
von Harald Grumser
In vielen Anwendungen taucht das Pro-
blem auf, Daten beliebiger Art zu sortie-
ren. Bei geringerem Umfang der
Datenmenge bietet sich ein Applesoft-
Programm an, wie es in dem Artikel „Wie
funktioniert Quicksort?“ in diesem Heft
beschrieben wird (die Lektüre dieses Bei-
trags wird hier vorausgesetzt). Diese Vor-
gehensweise erfordert jedoch die Anpas-
sung des Programms an den jeweiligen
Datentyp und benötigt bei einer großen
Zahl von Array-Elementen trotz des intelli-
genten Sortieralgorithmus eine beträchtli-
che Zeit. Abhilfe schafft hier der Übergang
zu einem Assemblerprogramm, das dar-
über hinaus alle drei Datentypen von Ap-
plesoft (Real-Zahlen, Integer-Zahlen und
Strings) unterstützt. So ist es möglich,
1000 Real-Zahlen in einer Zeit von unter 3
Sekunden zu sortieren. Außerdem wird
bei Strings eine Sortierung nach Duden
vorgenommen.
Das Programm QUICKSORT wird als Am-
persand-Utility in das eigene Applesoft-
Programm eingebunden, nachdem es
durch
BRUN QUICKSORT
(unter DOS 3.3, nicht unter ProDOS!) in-
stalliert wurde. Dieser Aufruf sollte stets
am Programmanfang erfolgen, da HIMEM
verändert wird. Der Sortiervorgang wird
dann eingeleitet durch den Befehl „&Ar-
ray“, wobei Array das zu sortierende Feld
bezeichnet, also z.B. XWERT, PUNKTE%
oder NAME$ (siehe QUICKSORT-
.‚DEMO).
1. Die Grundlagen
Bei der Programmierung eines umfang-
reicheren Programms erweist es sich als
vorteilhaft, zunächst einige Teilaspekte zu
untersuchen, um dann das ganze Problem
in Angriff zu nehmen (sog. Bottom-Up-
Programmierung). Dieser Weg soll auch
bei der Erläuterung dieses Programms be-
schritten werden.
16
Aufbau von Array-Variablen
Array-Variablen (auch indizierte oder Feld-
Variablen genannt) werden wie alle Varia-
blen hinter dem Applesoft-Programm ab-
gelegt. Während einfache Variablen stets 7
Bytes einnehmen, hängt der Umfang ei-
nes Feldes von drei Faktoren ab. Zunächst
kann ein Array bis zu 255 Dimensionen
umfassen, wobei jede Dimension wieder-
um aus bis zu (theoretisch) 65535 Ele-
menten bestehen kann. Die Größe eines
Elements hängt dann von dem Datentyp
ab:
— Integer-Zahlen belegen je zwei Bytes im
Speicher, die die Zahl (im Bereich -32767
bis 32767) repräsentieren.
— String-Variablen belegen je drei Bytes.
Das erste Byte gibt die String-Länge wie-
der, während die beiden nächsten Bytes
auf die eigentliche Zeichenkette, die sich
im String-Pool unterhalb von HIMEM oder
im Applesoft-Programm selbst befindet,
verweisen.
— Real-Zahlen werden durch fünf Bytes
gespeichert, ein Byte Exponent und vier
Bytes Mantisse.
Jedes Feld wird durch einen Vorspann
(Header) gekennzeichnet. Die ersten bei-
den Bytes geben Auskunft über den Na-
men, wobei die beiden Bit 7 den Varia-
blentyp bestimmen. Danach folgt ein
Zwei-Byte-Offset, der auf das nächste
Feld verweist. Das nächste Byte gibt die
Anzahl der Dimensionen wieder, woran
sich für jede Dimension je zwei Bytes an-
schließen, die die Anzahl der Elemente
pro Dimension beinhalten. Erst dann fol-
gen die einzelnen Elemente des Arrays
(weiter Informationen hierzu sind der Ap-
plesoft BASIC Programmieranleitung, An-
hang | zu entnehmen).
Da das Programm nur eindimensionale
Felder unterstützt, entfällt die umständli-
che Berechnung der Speicherabbildungs-
funktion (diese Funktion weist jeder Ele-
ment-Koordinate des n-dimensionalen
Feldes eine lineare Speicheradresse zu).
Die Auswertung des Arrays
Beim Einsprung in die Quicksort-Routine
steht der Programmzeiger (Textpointer)
auf dem ersten Zeichen des Array-Na-
mens. Der Applesoft-Interpreter enthält ei-
ne Routine, die diesen Namen auswertet
und einen Zeiger auf den Beginn des an-
gegebenen Feldes richtet. Diese Routine
namens PTRGET kann durch das Sog.
SUBFLAG gesteuert werden, um z.B. zu
verhindern, daß das Feld neu angelegt
wird. Nach der Bestimmung der Speicher-
adresse des Arrays muß zunächst der
Datentyp bzw. die Länge eines Elements
mit Hilfe der Speicherstellen VALTYP und
INTFLAG ermittelt werden, da bei der
späteren Bearbeitung stets die Länge be-
rücksichtigt werden muß.
Danach erfolgt eine Überprüfung der Di-
mension, um gegebenenfalls via BSSERR
die Meldung „BAD SUBSCRIPT ERROR"
auszugeben, falls es sich um ein mehrdi-
mensionales Feld handelt.
Mit der sich daran anschließenden Be-
rechnung der Feldlänge wird der Anfangs-
und Endwert (START und END) gesetzt
und somit das Intervall für den ersten Re-
kursionsschritt festgelegt.
Vergleich zweier Elemente
Ein wesentlicher Bestandteil des Sortie-
rens besteht im Vergleich zweier Elemen-
te. Hierzu wird ein Element in den Fließ-
komma-Akkumulator FAC übertragen, im
Fall von FP-Variablen durch die ROM-Rou-
tine MOVFM und ansonsten durch einen
eigenen Programmteil. Es bietet sich an,
das mittlere Element des Intervalls, das
während eines ganzen Rekursionsschrit-
tes als Grundlage aller Vergleiche dient,
dort abzulegen.
Peeker 1/86
Der Vergeich muß abhängig vom
Datentyp erfolgen. Real-Zahlen können
durch FCOMP (Einsprung bei FCOMP1)
verglichen werden, während bei Integer-
Zahlen eine eigene Routine die Verarbei-
tung beschleunigt, da der Interpreter eine
Typumwandlung in Real-Zahlen vorneh-
men würde, was unnötige Zeit kostet. Der
Vergleich wird durch das Vorzeichen-Bit
(Bit 15) erschwert, da bei negativen Zah-
len die Logik umgekehrt werden muß und
bei Zahlen mit unterschiedlichen Vorzei-
chen nur das Vorzeichen als Kriterium her-
angezogen werden darf.
Bei String-Variablen kann ebenfalls nicht
auf eine Interpreter-Routine zurückgegrif-
fen werden, da der Vergleich der einzel-
nen ASCIl-Werte keine Sortierung nach
Duden ergeben würde.
Duden-Normierung
Die Duden-Normierung sieht folgende Ab-
weichungen gegenüber dem Applesoft-
Vergleich von Strings vor:
— Groß- und Kleinbuchstaben sind äquiva-
lent.
— Zahlen und Sonderzeichen haben kei-
nen Sortierwert.
— Umlaute (ä, ö, ü) werden wie die ent-
sprechenden Selbstlaute (a, 0, u) behan-
delt.
Die Sonderstellung des Eszett wird hier
nicht berücksichtigt, so daß das „B“ nach
„zZ“ eingeordnet wird.
Die Routine, die diese Anpassung vor-
nimmt, wird für beide zu vergleichenden
Strings benutzt. Ein kleiner Trick erspart
hier einige Zyklen an Rechenzeit. Statt
eines Aufrufs als Unterprogramm wird der
Programmablauf durch das V-Flag ge-
steuert.
Die Verwaltung der Elemente
Grundsätzlich bestehen zwei Möglichkei-
ten, den Zugriff auf die einzelnen Elemen-
te zu gestalten:
— Es wird der jeweilige Index verwaltet und
vor einem Zugriff auf ein Feldelement die-
ser Index mit der Länge eines Elements
multipliziert und die Anfangsadresse des
Arrays addiert, um zu der entsprechenden
Speicherposition zu gelangen. Diese Ver-
waltung erweist sich als sehr einfach bei
der Bestimmung des mittleren Elements,
kostet jedoch viel Zeit.
— Die einzelnen Elemente werden direkt
über ihre Speicherposition verwaltet, wo-
durch sich der Zugriff sehr vereinfacht.
Diese Möglichkeit bereitet jedoch Schwie-
rigkeiten bei der Bestimmung des mittle-
ren Elements, da eine Halbierung des In-
tervalls bei ungeradzahliger Anzahl von
Elementen einen Zeiger auf die Mitte ei-
nes Eintrags erzeugen würde. Daher muß
in diesem Fall ein Element von der Inter-
Peeker 1/86
vallänge subtrahiert werden, was bei der
Bestimmung MIDDLE = (START + END) /
2 einer Abrundung entspricht. Die Festle-
gung, ob es sich um eine gerade oder
ungerade Anzahl von Elementen handelt,
ist nicht ganz einfach, da sie nur über den
START- und END-Wert in Abhängigkeit
von der Elementlänge (2, 3 oder 5 Bytes)
erfolgen kann. Die Lösung sieht dement-
sprechend kompliziert aus: Sind START-
und END-Wert beide gerade oder ungera-
de (zu erkennen am gleichen Bit 0), muß
bei ungerader Elementlänge (3 oder 5
Bytes) eine Anpassung erfolgen. Sind
START- und END-Wert beide in der zwei-
ten Stelle gerade oder ungerade (zu er-
kennen am gleichen Bit 1), muß bei gera-
der Elementlänge (2 Bytes) eine Anpas-
sung erfolgen.
Der zweiten Möglichkeit wurde wegen ih-
rer kürzeren Ausführungszeit der Vorzug
gegeben.
2. Die Programmausführung
Das Verständnis des Quicksort-Algorith-
mus wird für die weiteren Ausführungen
vorausgesetzt.
Die Vorgehensweise des Assemblerpro-
gramms unterscheidet sich nur in wenigen
Punken von dem Applesoft-Programm des
0.9. Artikels.
Erst- und Letzttausch entfallen wie auch
die dazu analoge Einrichtung eines Senti-
nels am Ende des Feldes, da dies zu einer
Überschreibung des eventuell nächsten
Arrays führen würde.
Die Bildung der Intervalle gestaltet sich
ebenfalls etwas anders. Am Ende eines
Rekursionsschrittes werden linker und
rechter Zeiger vertauscht, um sicherzu-
stellen, daß sich die Intervallgrenzen nicht
überschneiden. Der eventuelle Austausch
zweier gleicher Zeiger wird dabei in Kauf
genommen.
Somit kann jedoch nicht mehr durch die
Überschneidung der Zeiger das Ende ei-
nes Rekursionszweiges erkannt werden.
Als Kriterium zum Abbruch des Intervalls
wird daher die Intervallänge herangezo-
gen. Falls weniger als drei Elemente vor-
liegen (d.h. erstes und mittleres Element
sind wegen der Abrundung beim Halbie-
ren gleich), wird dieser Ast beendet und
ein neues Intervall vom Stack geholt.
Die gravierendste Unterscheidung liegt in
der Bestimmung des auf den Stack zu
schiebenden Intervalls. Wird stets das
kleinere Intervall auf den Stack gescho-
ben, ist sichergestellt, daß der Stack nicht
überlaufen kann, da im ungünstigsten Fall
das Intervall halbiert wird. Es hat sich zeit-
lich jedoch als günstiger erwiesen, diese
Unterscheidung nicht zu machen, sondern
stets dieselbe Intervallhälfte (hier die rech-
UTILITIES 4
te) zu speichern. Dadurch ist jedoch die
Anzahl der notwendigen Stackelemente
nicht mehr begrenzbar, wodurch ein Über-
lauf eintreten kann. Dieser Spezialfall wird
dadurch abzufangen, daß der komplette
Sortiervorgang nochmals von vorne ge-
startet wird.
Abgesehen von diesen Unterschieden
kann der Ablauf des Programms analog
aus dem Applesoft-Programm übertragen
werden.
Kurzhinweise
1. Zweck:
Ampersand-Utility zur Sortierung eines
eindimensionalen Arrays nach dem
Quicksort-Algorithmus.
2. Konfiguration:
II+, Ile oder IIc;
DOS 3.3
(kein ProDOS wegen HIMEM-Änderung)
3. Test:
RUN QUICKSORT.DEMO
4. Sammeldisk:
QUICKSORT.DEMO
(Applesoft-Demo-Programm)
T.QUICKSORT
(Big-Mac-Quelltext)
QUICKSORT
(Maschinenprogramm)
Ältere Peeker-Hefte
können für DM 6,50 pro Heft
zuzüglich Versandspesen ange-
fordert werden. Vergriffene
Hefte sind als Photokopien
für DM 10,- pro Heft erhält-
lich.
Dr. A. Hüthig Verlag - Heidelberg
17
QUICKSORT
BSAVE QUICKSORT, A37907, L493
l
2
6)
ie
5
6
7
8
9
9413:
9415:
9417:
94AlA:
941D:
94lF:
9421:
9423:
9425:
9426:
9428:
9ARA:
942D:
9AZF:
9431:
9433:
9434:
9436:
9438:
94A3A:
945C:
943E:
9449:
9442:
9444:
9447:
9449:
944B:
944D:
9AAF:
9451:
9453:
9455:
9457:
9459:
945B:
945C:
945D:
94A5F:
9461:
9463:
18
A9 94
AB 26
8D F7
8C F6
85 74
84 73
84 6F
AD 94
ES EC
85 98
BO 91
03
03
DF
El
-——— 1... 0...
*
” Ampersand-Utility Quicksort .
*
” Harald Grumser, 1985 .
Me *
ORG $9413 ‚37907
START EQU $9 ‚Intervallstart
LFTPTR EQU $2 ;linker Zeiger
MIDDLE EQU $4 ;‚Intervallmitte
RGHTPTR EQU $6 ‚rechter Zeiger
END EQU $8 ;‚Intervallende
VALTYP EQU $11l ;$FF = String
INTFLAG EQU $12 ;$80 = Integer
SUBFLAG EQU $14 ;Integer/DIM-Flag
YSAV EQU $34 ;‚l. String-Index
YSAVl EQU $35 ;2. String-Index
DEST EQU $69 ‚allg. Zeiger
RESULT EQU $62 ;temp. Deskriptor
CHAR EQU $65 ;Vergleichszeichen
FRETOP EQU $6F ;Ende der Strings
MEMSIZE EQU $73 ;‚HIMEM
FAC EQU $9D ;Fließkomma-Akku
LOWTR EQU $9B ;‚Arraypointer
SP EQU $EB ‚"Stackpointer"
LENGHT EQU $EC ;‚Variablenlänge
IN EQU $209 ;Hilf-Stack
AMPER EQU $3F5 ;&-Vektor
PTRGET EQU $DFE3 ‚Var. auswerten
BSSERR EQU $E196 ;"BAD SUBSCRIPT'"
MOVFM EQU $EAFY9 ;(A,Y) -> FAC
FCOMP1 EQU $EBB6 ;(A,Y)/FAC vergl.
* Initialisierung
#-————— — 1.0... ....4
INIT LDA #>SORT
LDY #<SORT
STA AMPER+2 ‚Ampersand,
STY AMPER+1
STA MEMSIZE+l ; HIMEM,
STY MEMSIZE
STA FRETOP+1 ; und FRETOP
STY FRETOP ;‚ initialisieren
RTS
* Hauptprogramm
#-————— 1... 4
* Array bestimmen und initialisieren
SORT
NOINT
NOSTR
DIMOK
LDA
STA
JSR
LDA
BIT
BPL
LSR
BIT
BEQ
LDA
STA
LDY
LDA
CMP
BEQ
JMP
LDA
ADC
STA
LDA
ADC
STA
LDX
LDY
LDA
ADC
PHP
SEC
SBC
STA
BCS
DEX
+701000000 ;Flag für Array-
SUBFLAG ; Suche (V-Flag)
PTRGET ‚Array auswerten
#5 ;‚Variablenlänge
INTFLAG ; bestimmen:
NOINT
; 2 = Integer
VALTYP ; 3 = String
NOSTR ; 5 = Real
#3
LENGHT
+04 ‚Zeiger auf DIM-Zahl
(LOWTR),Y
#1 ‚nur eindimensionale
DIMOK ; Felder zulässig
BSSERR ‚"BAD SUBSCRIPT"
LOWTR
#7-1 ;‚Schleifenkopf
START ‚addieren
LOWTR+1
+9
START+1
LOWTR+1
+$02 ;Feld-Offset
(LOWTR),Y
LOWTR ;Low-Byte
;‚Carry der Addition
LENGHT ‚Länge des letzten
END ; Elements
SP1 ;‚ subtrahieren
9464:
9465:
9466:
9467:
9469:
946B:
946D:
946F:
9471:
9473:
9475:
9476:
9479:
9ATB:
9ATE:
9489:
9483:
9485:
9488:
9ABA:
948B:
948D:
9A8F:
9491:
9493:
9495:
9497:
9499:
949B:
949D:
949F:
94APß:
YAA2:
94A3:
94A5:
94AAT:
9449:
94AB:
94AAD:
9AAF:
94Bl:
94B3:
94B4:
94B5:
94B6:
94B8:
94ABA:
94BB:
94ABC:
94BD:
9ABE:
9Aac9:
94C1:
9403:
9404:
94C5:
9407:
94C9:
94ACB:
94ACD:
9ACF:
94D2:
94D3:
94D5:
94D7:
94D9:
94DB:
94DD:
9ADF:
94E2:
94E5:
94ET:
94E9:
94EB:
94ED:
9AEF:
94F]:
94F3:
94F6:
9B
#9
99
EB
1E
EB
Q1
FC 91
FD 1
FE @1
FF @1
n8
#9
D6
07
0
Bl
02
93
08
09
#8
12
D4
#2
Bl
DA
EC
Bl
99
05
04
12
BC
02
9D 99
F9 EA
EF 94
02
02
02
93
92
03
6F 95
05
199
101
192
103
194
195
196
107
198
199
11®
1ll
112
113
114
115
116
117
118
119
12
121
122
123
124
125
126
127
128
129
139
131
132
133
134
135
136
137
138
139
14
141
142
143
144
145
146
147
148
149
15®
151
152
153
154
155
156
157
158
159
169
161
162
163
164
165
166
167
168
169
179
171
172
173
174
175
176
177
178
179
189
SP1 PLP ‚Carry aus Addition
INY
TXA ‚High-Byte
ADC (LOWTR),Y
STA END+1l
LDA +#$9® ‚Stack
STA SP ;‚ initialisieren
BEQ SUBSORT ‚unbedingt
* Neues Intervall vom Stack, falls möglich
SORTSUB LDX SP ‚Stackpointer
BNE NOEND ;falls Null,
RTS ‚ENDE
NOEND LDA IN-4,X ‚neuer
STA START ;‚ Startwert
LDA IN-3,X
STA START+1
LDA IN-2,X ‚neuer
STA END ; Endwert
LDA IN-1l,X
STA END+1
TXA
SBC #4 ;Pointer
STA SP ; erniedrigen
* Zeiger für neues Intervall setzen
SUBSORT LDA END ‚rechten
LDX END+1 ;‚ Zeiger
STA RGHTPTR ;‚ initialisieren
STX RGHTPTR+1
LDA START ‚linken
LDX START+1 ‚ Zeiger
STA LFTPTR ;‚ initialisieren
STX LFTPTR+1
CLC ;MIDDLE =
ADC END ;(START + END) / 2
TAY ;bei ungeradzahl.
LDA START ; Elementen muß
EOR END ‚ angepaßt werden
BIT INTFLAG ‚Integer?
BPL ADJ ‚nein, dann weiter
AND +%00000019
BNE ADJ1 ‚ungeradzahlig
ADJ AND #7%00000001
BEQ NOADJ ‚geradzahlig
ADJ1 PHP
SEC ‚ein Element
TYA ; abziehen, um
SBC LENGHT ;‚ geradzahlig
BCS SP2 ; vorzutäuschen
DEX
SP2 PLP
TAY
NOADJ TXA
ADC END+1 ‚addieren
ROR ; und durch 2
STA MIDDLE+1 ‚ dividieren
TYA ;‚ ergibt
ROR ;‚ mittleres
STA MIDDLE ; Element
* Mittleren Wert nach FAC übertragen
LDA INTFLAG ‚Integer?
BPL_ FPSTR ‚nein, dann weiter
MOVXM LDY #2 ‚2 oder 3 Bytes
MOVLOOP LDA (MIDDLE),Y ; für Integer
STA FAC,Y ‚ oder Strings
DEY ; übertragen
BPL MOVLOOP
BMI CMPLEFT ‚unbedingt
FPSTR LDA VALTYP ‚String?
BMI MOVXM ‚ja, dann weiter
LDA MIDDLE ‚ansonsten
LDY MIDDLE+1 ; mittels
JSR MOVFM ; ROM-Routine
JMP CMPLEFT
* Linken Zeiger erhöhen
INCLEFT LDA LFTPTR ;linken
ADC LENGHT ;‚ Zeiger um
STA LFTPTR ; Elementlänge
BCC CMPLEFT ;‚ erhöhen
INC LFTPTR+1
CMPLEFT LDA LFTPTR ;(A,Y) >
LDY LFTPTR+1 ; MIDDLE?
JSR COMPARE
BCS CMPRGHT ‚ja, dann weiter
Peeker 1/86
ee ——————————————EEG
94AFB8:
94AFA:
94AFD:
YAFF:
9501:
9594:
9596:
9508:
95PA:
950C:
95BE:
9519:
9512:
9514:
9515:
9517:
9518:
951A:
951C:
951D:
951F:
9529:
9522:
9523:
9526:
9527:
9529:
952B:
952D:
952F:
9531:
9533:
9535:
9538:
953A:
953D:
953E:
9541:
9544:
9545:
9548:
9549:
954B:
954D:
954F:
9551:
9554:
9556:
9559:
955C:
955D:
955E:
9569:
9562:
9564:
9566:
9568:
956A:
956C:
956F:
9571:
9573:
9575:
9577:
9579:
957B:
957D:
957F:
9581:
9582:
9584:
9586:
99
20
A4
29
Bd
AS
C5
A5
ES
A4
88
Bl
AA
Bl
8A
91
88
19
38
29
18
9B
85
84
A6
19
Peeker 1/86
EB
F5
d6
07
6F
F2
02
d6
03
17
EC
2
d6
02
06
F3
F5
BC
99
D4
99
1
5
93
7
ol
d2
06
02
d6
EF
EB
FC
93
47
BB
06
09
D4
FA
EB
02
08
3
09
8F
69
61
12
1A
95
95
95
94
11)
99
u)
11)
94
1)
02
94
181
182
183
184
185
186
187
188
189
199
191
192
193
194
195
196
197
198
199
209
291
202
203
204
205
206
207
208
209
219
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
239
231
232
233
234
235
236
237
238
239
249
241
242
243
244
245
246
247
248
249
259
251
252
253
254
255
256
257
258
259
269
261
262
263
264
265
266
267
268
269
270
rl
272
BCC
INCLEFT ;weiter erhöhen
* Rechten Zeiger erniedrigen
DECRGHT JSR
CMPRGHT LDA
LDY
JSR
BEQ
BCS
* Vertauschen,
SWAP LDA
CMP
LDA
SBC
BCS
LDY
DEY
LDA
TAX
LDA
STA
TXA
STA
DEY
BPL
SEC
JSR
CLC
BCC
SWPLOOP
DECRIGHT
RGHTPTR ;(A,Y) <=
RGHTPTR+1 ; MIDDLE?
COMPARE
SWAP ;ja, dann weiter
DECRGHT ‚weiter erniedr.
falls LFTPTR < RGHTPTR
LFTPTR ‚linker Zeiger
RGHTPTR ‚ größer
LFTPTR+1 ;‚ oder gleich
RGHTPTR+1l ; rechter Zeiger?
NEXTSUB ‚ja, dann weiter
LENGHT
;2, 3 oder 5
(LFTPTR),Y ; Bytes
; austauschen
(RGHTPTR),Y
(LFTPTR),Y
(RGHTPTR),Y
SWPLOOP
‚für Subtraktion
DECRIGHT
;für Addition
INCLEFT ‚nächstes Paar
* Intervall gegebenenfalls aufteilen
NEXTSUB LDA START ‚Intervall-
CMP MIDDLE ;‚ länge
BNE NEXTSUBl ; 1 oder 2?
LDA START+1
CMP MIDDLE+1
BNE NEXTSUBl ‚nein, dann weiter
JMP SORTSUB ;REKURSTION
NEXTSUBl LDY +#$01 ;linken und
NSBLOOP LDA LFTPTR,Y ; rechten
TAX ‚ Zeiger
LDA RGHTPTR,Y ; austauschen
STA_ LETPTR,Y ; (falls
TXA . LFTPTR >
STA RGHTPTR,Y ; RGHTPTR)
DEY
BPL NSBLOOP
LDX SP ‚Stackpointer
CPX #-4 ;Überlauf?
BNE NOOVFL ‚nein, dann weiter
JMP DIMOK ‚nochmal versuchen
NOOVFL LDY #9 ‚Zähler
PUSH LDA RGHTPTR,Y
STA IN,X ‚rechten Zeiger
INX ; und Intervall-
INY ; ende retten
CPY #4
BNE PUSH
STX SP ‚neuer Pointer
LDA LFTPTR ‚linker
STA END ;‚ Zeiger
LDA LFTPTR+1 ;‚ ist neues
STA END+1 ;‚ Intervallende
JMP SUBSORT ;REKURSTION
” Unterprogramme
m ee
* 2 Elemente vergleichen (mittleres und (A,Y)
COMPARE STA DEST ‚Zeiger
STY DEST+1 ;‚ eintragen
LDX INTFLAG ‚Integer?
BPL COMPFP ‚nein, dann weiter
* Integer-Zahlen vergleichen
COMPINT LDY
LDA
CMP
BCC
BNE
INY
LDA
CMP
BEQ
+$99 ‚Int. vergleichen
(DEST),Y
FAC ‚Zahlen liegen
CMPINTL1
CMPINTI
; im High/Low-
(DEST),Y ; Format vor
FAC+1
RTNCPI
en UTILITIES
9588: 88 PA) DEY ‚wieder auf MSB
9589: 6A 274 CMPINTl ROR ;C -> Bit 7
958A: 51 69 275 EOR (DEST),Y ;Vorzeichen-Bit
958C: 45 9D 276 EOR FAC ; berücksichtigen
958E: 38 27T SEC ‚(löscht Z-Flag)
958F: 2A 278 ROL ;Bit 7” ->C
9590: 69 279 RTNCPI RTS
280
281 %* Real-Zahlen vergleichen
282
9591: A6 11 283 COMPFP LDX VALTYP ;Fließkomma-Zahl?
9593: D® 94 284 BNE COMPSTR ;nein, dann weiter
9595: 38 285 SEC ;(falls FAC = (A,Y))
9596: AC B6 EB 286 JMP FCOMP1 ;FP-Vergleich
287
288 x Strings vergleichen
289
9599: AB B2 298 COMPSTR LDY +#$92 ;‚Deskriptor
959B: Bl 69 291 SETDESC LDA (DEST),Y ‚ als feste
959D: 99 62 0B 292 STA RESULT,Y ; Adresse
95Aß: 88 293 DEY ‚ ablegen
95Al: 19 F8 294 BPL SETDESC
95A3: 84 34 295 STY YSAV ;‚initialisieren
95A5: 84 35 296 STY YSAVI
95A7: AA 34 297 CSLOOP LDY YSAV ;l. String-Index
95A9: 24 14 298 BIT SUBFLAG ‚V-Flag setzen
95AB: C8 299 CMPMID INY ‚nächstes Zeichen
95AC: CA 9D 300 CPY FAC ‚Länge
95AE: F$ 3E 301 BEQ RTNCS ; erreicht
95B®: Bl 9E 302 LDA (FAC+1),Y ;MIDDLE-Character
95B2: 79 1® 303 BVS CHKCHR ‚unbedingt
95B4: 90 F5 304 CMPMID1 BCC CMPMID ‚ohne Sort.-Wert
95B6: 85 65 305 STA CHAR
95B8: 84 34 306 STY YSAV
95BA: AA 35 307 LDY YSAVl ‚2. String-Index
95BC: B8 308 CLV ;V-Flag löschen
95BD: C8 309 CMPAY INY ‚nächstes Zeichen
95BE: CA 62 319 CPY RESULT ‚Länge
95C9: FO 31 =11 BEQ RTNCS1 ; fertig
95C2: Bl 63 312 LDA (RESULT+1),Y ;(A,Y)-Character
313
95C4: 29 7F 314 CHKCHR AND #%®1111111 ;ASCII normieren
9506: C9 69 515 cCMPU #'a'-l ;Gemeine durch
9508: 90 92 316 BCC VERSAL ; Versalien
95CA: 29 DF 517 AND #%11®11111 ; ersetzen
95CC: C9 41 318 VERSAL CMPU #'A' ‚alle anderen
95CE: 90 13 319 BCC NOSVAL ; ohne Sort.-Wert
95Dß: CY 5B 320 cCMP #'Ä'
95D2: D® 92 521 BNE NOAE ;Umlaute
95D4: A9 41 322 LDA #'A' ; durch
95D6: C9Y 5C 323 NOAE CMP #'Ö' ; entsprechende
95D8: DB 92 324 BNE NOOE ; Selbstlaute
95DA: A9 AF 325 LDA #'0' ‚ ersetzen
95DC: C9Y 5D 326 NOOE CMP #'Ü'
95DE: DB 92 327 BNE NOUE
95Eß: AY 55 328 LDA #'U'
95E2: 38 329 NOUE SEC ‚mit Sort.-Wert
95E3: 78 CF 330 NOSVAL BVS CMPMID1 ;‚V-Flag statt JSR
331
95E5: 99 D6 352 BCC CMPAY ‚ohne Sort.-Wert
95E7: 84 35 3353 STY YSAVl
95E9: C5 65 554 CMP CHAR ‚vergleichen
95EB: F®ß BA 335 BEQ CSLOOP ‚gleich, -> weiter
95ED: 6% 336 RTS
95EE: A5 62 337 RTNCS LDA RESULT ‚Länge als
95Fß: C5 9D 338 CMP FAC ; Kriterium
95F2: 69 339 RTS
95F3: 18 348 RTNCS1 CLC ;:(A,Y) < FAC
95F4: 6® 341 RTS
342
343 % Rechten Zeiger erniedrigen
344
95F5: A5 B6 345 DECRIGHT LDA RGHTPTR ;durch
95F7: ES EC 346 SBC LENGHT ; Subtraktion
95F9: 85 96 347 STA RGHTPTR ; der
95FB: B® 92 348 BCS RTNDR ; Element-
95FD: C6 97 349 DEC RGHTPTR+1 ; länge
95FF: 6% 350 RTNDR RTS
493 Bytes
QUICKSORT.DEMO
18 PRINT CHR$ (4)"BRUN QUICKSORT"
28 DIM A(999)
38 FOR I = ß TO 999
40 A(I) = RND (1) * 1999
50 NEXT
60 PRINT CHR$ (7): & A: PRINT CHR$ (7) p
78 FOR I = ® TO 999
80 PRINT A(I): NEXT =
19
Da der Mensch bekanntlich nicht einseitig
denken und arbeiten soll, ist es für jeden
Apple-Besitzer mindestens genauso wich-
tig, sich neben den künstlichen Sprachen
wie Pascal, BASIC, Assembler usw. auch
in natürlichen Sprachen zu üben. Falls Sie
eine Fremdsprache erlernen möchten, ge-
hört das Üben der jeweiligen Vokabeln
unausweichlich dazu. Nachfolgend wird
ein Programm beschrieben, mit dessen
Hilfe Sie beliebige Vokabeldateien erstel-
len und abfragen können.
f\2
wn
x \ / = 4: {
> N 4 p
r \ ) N X:
\ FR
= /
x G u l R
Nr EL
4 )
N -— f \
\ 2 j )
A “ / Ir
% EG N Bi i
EN NT u
us N
20
4
2 + SR &
A
I Wr, =, N
RL Ds ; A
u
x /
w%
en DE ER |
N 7a
LEE“
Vokabeltrainer
Vokabeln lernen mit dem Apple Il
Wegen des ungewöhnlich großen Um-
fangs des Programms (allein das Ap-
plesoft-Listing würde über 8 Seiten ein-
nehmen) und weil ein Teil der Routinen
bereits an anderer Stelle erschienen ist, ist
das Programmpaket nebst einer ca. 1000
Vokabeln umfassenden deutsch-engli-
schen Grundwortschatz-Datei nur auf der
Peeker-Sammeldiskette enthalten.
von Thomas Zink
Peeker 1/86
1. Allgemeines
Voraussetzung für die Benutzung des Vo-
kabeltrainerprogramms sind ein Minimal-
Apple-Il oder ein Kompatibler (40 Z/Z oh-
ne Kleinschreibung genügt) mit einem
Laufwerk und einer Language-Card, die
allerdings nur für das Kopierprogramm be-
nötigt wird. Bei der Benutzung sollte die
Taste Shift-Lock eingerastet sein.
Das Programmpaket besteht aus zwei BA-
SIC- und sechs Assemblerprogrammen.
BASIC-Programme:
a. VOK.TRAINER - Eigentliches Vokabel-
programm mit 9 Hauptmenü-Optionen
(S.U.).
b. VOK.COPY - Kleineres BASIC-Pro-
gramm (über Option 7), das das Kopieren
von Disketten steuert.
Assembler-Hilfsprogramme:
a. CATALOG - Generiert den für die Op-
tionen 1-6 benötigten speziellen Katalog-
ausdruck.
b. FREI-SEK - Berechnet die Anzahl der
freien Sektoren auf der im Laufwerk be-
findlichen Diskette.
c. GETLINE - Das normale Applesoft-
INPUT interpretiert die Sonderzeichen
"und „:“ als Feldtrenner. GETLINE
ermöglicht deren Eingabe von der Tastatur
und einer Textdatei.
d. DOS-LOS - Bereitet eine DOS-lose
Datendiskette vor. Ferner wird ein Boot-
Programm mit einer Meldung auf Track 0,
Sektor O0 geschrieben, damit der Computer
beim versehentlichen Booten nicht ab-
stürzt; auch für 40-Spur-Disketten.
e. RWTS - Dient für die Programme a, b
und d als Read-Write-Track-Sector-Routi-
ne, d.h. zum Lesen und Schreiben von
beliebigen Sektoren der Diskette.
f. BCOPY - (Objekt-Code: VOK.BCOPY)
- 1-Drive Kopierprogramm; auch für 40-
Spur-Disketten.
Die Routinen FREI-SEK, DOS-LOS,
RWTS und BCOPY stammen aus „Apple
DOS 3.3“ von U. Stiehl, während die GET-
LINE-Routine auf H. Grumser zurückgeht
(Peeker, 5/85).
Die Programme a-e sind unter dem Na-
men VOK.PACK als Objektcode (von
$8F60 bis $9465) zusammengefaßt. Das
Kopierprogramm BCOPY wird als einzelne
Datei ab $8000 abgelegt. Die Quellcode-
Dateien der Maschinenprogramme befin-
den sich aus Platzgründen nicht auf der
Peeker-Sammeldisk.
Einleitend ist vielleicht noch zu erwähnen,
daß am Anfang des Vokabeltrainerpro-
gramms der Reset-Vektor auf das Ap-
plesoft-Kommando „RUN“ ($D655) ge-
richtet wird, so daß beim Drücken der Re-
Peeker 1/86
set-Taste das Programm neu startet. Fer-
ner sei darauf hingewiesen, daß alle BA-
SIC- und Maschinenprogramme, so weit
es geht, mit Fehlerabfangroutinen ausge-
stattet sind, die auf eventuelle Eingabe-
oder Diskettenzugriffsfehler (z.B. Input/
Output-Error usw.) mit entsprechenden
Hinweisen reagieren, um danach das Pro-
gramm an geeigneter Stelle wieder fortzu-
setzen.
2. Hauptmenü von VOK.TRAINER
Kurz nach dem Programmstart mit
RUN VOK.TRAINER
erscheint ein Menü, von dem aus Sie 9
Teilprogramme oder Menü-Optionen aus-
wählen können:
Vokabeln abfragen
Vokabeln hinzufügen
) Vokabeln berichtigen
) Neue Datei eröffnen
) Datei löschen
) Datei umbenennen
)
)
)
(1)
(2)
(3
(4
|
|
|
Disketten kopieren
(8) Disketten formatieren
(9) Quit (Ende)
ö
6
7
8
Während sich die ersten drei Optionen (1-
3) auf das Abfragen, Hinzufügen und Be-
richtigen von Vokabeln beziehen, ermögli-
chen Ihnen die nächsten drei Optionen (4-
6) das Eröffnen, Löschen und Umbenen-
nen von Vokabeldateien. Die nächsten
beiden (7-8) schließlich gestatten die Ma-
nipulation von Disketten, genauer gesagt
das Kopieren und Formatieren. Und über
Option 9 kann man schließlich das Pro-
gramm beenden. Danach ist der Reset-
Vektor wieder normalisiert.
Die Beantwortung der einzelnen Unterop-
tionen in den Teilprogrammen erfolgt über
die Tastatur. Die erlaubten Tasten sind
meistens am Ende des Textes angegeben.
Generell ist anzumerken, daß Sie mit
W(unsch)
fast immer zum Hauptmenü zurückgelan-
gen. Von dort aus eröffnet Ihnen die Taste
ESC die Einsicht in eine siebenseitige Zu-
sammenstellung der wichtigsten Tasten-
belegungen in den einzelnen Teilpro-
grammen.
Bei den Optionen 1-6 werden Sie zu-
nächst aufgefordert, den Namen der zu
bearbeitenden Vokabeldatei einzugeben.
In der Mitte des Bildschirms wird ein In-
haltsverzeichnis der bereits vorhandenen
Vokabeldateien aufgelistet und darunter
die Anzahl der noch freien Sektoren auf
der Diskette angezeigt. Überschreitet die
Zahl der Dateien 18, so können Sie mit der
Leertaste weitere auf der Diskette enthal-
tene Dateien ausdrucken lassen oder mit
Return den weiteren Ausdruck verhindern.
4 schule 44
3. Die VOK.TRAINER-Optionen
Die Beschreibung der 8 Hauptmenu-Op-
tionen entspricht nicht dem Bildschirm-
Menü, sondern der Reihenfolge der Anla-
ge einer neuen Datei.
Option 8:
Disketten formatieren
Bevor der Computer Daten auf eine Dis-
kette speichern kann, muß sie bekanntlich
formatiert bzw. initialisiert werden. Über
Option 8 wird die Diskette nicht wie sonst
üblich mit 35 Tracks, sondern mit 40
Tracks (entspricht 20K mehr Speicher-
platz) initialisiert (Patch von - Wolfgang
Schöpe aus mc-Apple-Sonderheft, S. 23).
Für diejenigen, die ein Laufwerk besitzen,
welches nicht in der Lage ist, den Schreib/
Lesekopf über die Breite von 40 Tracks zu
bewegen, kann auch mit 35 Tracks forma-
tiert werden. Zur Gewinnung von weite-
rem Speicherraum wird ferner eine DOS-
\ose Datendiskette vorbereitet (entspricht
8K mehr Speicherplatz). Insgesamt sum-
miert sich die verfügbare Speicherkapazi-
tät der Diskette auf 124K (normal) + 20K
+ 8K = 152K.
Option 4:
Neue Datei eröffnen
Nach der Formatierung der Datendiskette
können Vokabeldateien eingerichtet wer-
den (Option 4). Zunächst geben Sie dazu
der zukünftigen Datei einen Namen und
legen nachfolgend die Sprache fest, in der
Sie Vokabeln eingeben und abfragen
möchten. Jede so von Ihnen eingerichtete
Vokabeldatei wird im Inhaltsverzeichnis
aufgelistet und repräsentiert auf der Dis-
kette zwei einzelne Files, einen Binärfile
„Name.INFO“ (enthält Informationen über
Vokabelanzahl und Fehlerstufen, s.u.) und
einen Textfile „Name.VOK“ (enthält die
Vokabeln).
Optionen 5 und 6:
Datei löschen und umbenennen
Zur einfacheren Handhabung der Vokabel-
dateien ermöglichen die Optionen 5 und 6
das gemeinsame Löschen und Umbenen-
nen der Dateien „Name.INFO“ und „Na-
me.VOK“.
Option 2:
Vokabeln hinzufügen
Das Abfragen der Vokabeln ergibt natür-
lich erst dann einen Sinn, wenn Sie zuvor
die abzufragenden Vokabeln eingegeben
haben. Die Option 2 bietet hierzu die Mög-
lichkeit. Es erscheint eine Bildschirmmas-
ke auf dem Monitor, in der Sie links den
Namen der zuvor gewählten Datei und
21
Computerbucher
diegehen, für Computer ——
die kommen. Apple-Assembler
Band 1: Einführung in die
Frank Bühler Assembler-Programmierung
Applesoft BASIC
Arne Schäpers
Bewegte
Apple-Grafik
DOS Toolkit-Erweiterungen
ProDOS-Analyse
Versionen 1.0.1, 1.0.2, 1.1.1
/ıps und
IRRE,
Jürgen Kehrel
5) Hüthig 4 f Assembler lernen
Band 1: Einführung in die
Assembler-Programmierung
Frank Bühler des 6502
Applesoft Basic 1985, ca. 200 S., kart.,
Tips und Tricks DM 38,—
Ameschägere 1985, 241 S., 40 Abb., kart., ISBN 3-7785-1151-3
DM 38,—
Bewegte Apple-Grafik
1985, 305 S., 6 Abb., kart.,
DM 58,—
ISBN 3-7785-1150-5
ISBN 3-7785-1094-0
Arne Schäpers
ProDOS-Analyse
Versionen 1.0.1, 1.0.2, 1.1.1
1985, 470 S., kart., DM 68,—
ISBN 3-7785-1134-3
für Aufsteige
Mit ausführlichen
Ulrich Stiehl Programmbeispielen
für Aufsteiger
.. „"
»%u,+*
RER EN Er
mideYalg:Taglanle/sikTeltzilz1e 3 ips
Ulrich Stiehl Tre
2. Auflage
Ulrich Stiehl
ProDOS für Aufsteiger
Band 2
uren Sen ee
ProDOS für Aufsteiger
Band 1
2., geänderte Auflage 1985,
Ulrich Stiehl 208 S., kart., DM 28 —
Apple DOS 3.3 ISBN 3-7785-1098-3
Tips und Tricks
Ulrich Stiehl 3., völlig überarbeitete
Ausgabe erscheint
Apple Assembler Anfang 1986
1984, 200 S., 3 Abb., kart.,
DM 34,—
ISBN 3-7785-1047-9
Weitere Titel und Informationen finden Sie in unserem Computerbuch-Katalog:
Dr. Alfred Hüthig Verlag, Postfach 1028 69, 6900 Heidelberg 1
uchig
22 Peeker 1/86
“COMPUTER
OPERATO
Qualität un
d Fortschritt,
der sich bewährt hat!
Als Dankeschön für Ihr Vertrauen und die
große Nachfrage:
OPERATOR Il
jetzt nurnoch
Leistungstabelle:
Prozessor:
Interface:
Handshake wählbar:
Kabel mit Stecker:
Ausführliches Handbuch:
Schaltplan:
Gehäuse:
Deutsches Erzeugnis:
Hex-Eingabe:
Eingabebuffer:
Barcodeanschluß:
Passwortprogrammierbar:
Gewicht:
Maße:
Programmierbare Tasten:
Programmierbare
Ebenen tauschbar:
Frei programmierbar:
Kein Datenverlust
nach Abschalten:
Max. Speicherkapazität:
Pro Taste:
Vorprogrammierung:
Autorepeat:
Akustikgeber eingebaut:
inkl. MwSt.
6511
(ähnl. 6502)
paralleVseriell
ja
ja
ja
ja
ergonomisch
ja
ja
ja
möglich
ja
1,9 kg
47x19x3cm
3x38
alle 3 beliebig
EEPROM
(direkt über
Tastaturein-
gabe)
ja
1.6 kByte
14 Byte
2 Geschwin-
digkeiten
ja
Lieferung per Nachnahme zzgl. Versandspesen.
Ausführliches Info gegen Freiumschlag.
AFC Computer GmbH
Salmstr. 20 - 5000 Köln 91
Tel. 02 21/83 80 00, Telex 8 873 254 afc
INTUS-Lern- und
Anwenderprogramme
für Apple II - Computer
e Rechtschreibtrainer
für Deutsch
e Rechtschreibtrainer
für Englisch
e Wortschatztrainer
Englisch/Deutsch
Französisch/Deutsch
e Maschineschreiben
wie der Blitz
e Basic-Lernprogramm,
sehr umfangreich
e Kinderschule, Lernen
für Vorschulkinder DM 59,-
e AppleGraph, Erstellen von Kreis
und Balken-Graphiken DM 125,-
e Rechenmodelle für
AppleWorks-Rechenblatt DM 195,-
e PriBu-Privatbuchhaltung DM 195,-
e und über 200 weitere Programme.
Katalog gratis
e Demo-Disketten
mit 5-9 Teilprogrammen DM 10,-
e 6000 Frei-Programme (fast) gratis
Programm-Liste (Vorkasse) DM 10,-
DM 125,-
DM 9,-
DM 98,-
DM 98,-
DM 188,-
DM 295,-
N
INTUS SOFTWARE
Kaiserstr. 21, 7890 Waldshut,
Tel. 07751-7920
HERDERSTR. 12
640 KByte-Drives für den Apple //c!!
@ 5'/4- od. 31/-Zoll-Format (Teac FD55/35-F)
@ FD55-F umschaltbar auf 35/40 Track
® Anschluß an die externe Laufwerkbuchse
@ Durch Einbauplatine (kein Löten) 640 KByte im Direktzugriff
® Einfache Anpassung für DOS 3.3, UCSD-Pascal und PRODOS
durch menügeführten Patch
® Anpassung von CP/M in Verbindung mit einer Z 80-Zusatzplatine
in Vorbereitung
® anschlußfertig im Gehäuse DM 1090,—
Festplatten für Apple Il (//e)
@ 5'/ Zoll-Format (Slimline)
@ Booten direkt von der Festplatte in DOS 3.3, UCSD-Pascal,
PRODOS und CP/M 2.2 / 3.0
@ Gemischtbetr. mit 35/40/80/160 Track-Drives
® Copy- und Install-Programme im Lieferumfang
@ Umfangreiches Manual
® z.B. 10 MB incl. Netzteil u. Contr.,
anschlußfertig an Ihren Apple DM 3380,—
640 KByte-Drives für Apple Il (//e)
@ 5'/- od. 31/-Zoll-Format (Teac FD55/35-F)
@ FD55-F umschaltbar auf 40 Track (Apple kompatible)
@ Installationssoftware für DOS 3.3, UCSD-Pascal, CP/M 2.2,
CP/M 2.23 (60K), PRODOS, AP22, ALS CP/M+
® Umfangreiches Handbuch
@ Anschlußfertige Auslieferung incl. Contr. und 2 Drives
@ Diskstation 55ll (2 Teac FD55-F, 1.2 MB) DM 1350,—
® Diskstation 3511 (2 Teac FD35-F, 1.2 MB) DM 1478,—
80 Zeichen + 64 K für Apple //e
@® und jetzt hinsetzen . . . . DM 138,—
2000 HAMBURG 76
ON
I)
DIE NEUE DIMENSION
Das modulare 16/32-Bit Computer-System GEPARD
e CPU MC 68000, 10 M Hz - CPU MC 68020, 16 M Hz
e DRAM ab 512 K Byte
e Über 30 versch. Steckkarten im Europaformat (100 x 160 mm)
Anzeigenschluß
für
Ausgabe 3/86
ist am 17.
+ Kompatible
Komp 48
48 K. 6502 ohne Firmware
Komp 64
64 K, 6502, Z-80, 15er-Block
e Modula-2 Compiler
e Betriebssystem PARADIGE ug:
e System Editor auch © und !
© CPIM®-68K —Irpmanllker
e C-Compiler schnell®
e „Einsteigersysteme“ für
Apple Il und Commodore ab DM 2.598,-
Informationsmaterial kostenlos: Tel.: 0441/74084
computer GmbH + Co.KG, Westerstr. 10-12, 2900 Oldenburg
rür Apple Il, Ile
Z-80-Karte so. 80-Zeichen-Karte a
mit Sorftswitch, neue
Disknterfaceer 69- Vers. m. gest. scharf. Bild nn
Centronics-Interf. m. Kabel 69- GeechKarte — 5- BI
16-K-RAM-Karte 9- CoDchKarte— an
Eprommer (4, 8, 16 K) 139,- Komp 28 797.- n
128-K-RAM-Karte 279,- Apple 2E kompatible, Rechner
256-KB-RAM-Karte uug,- 64 K im 2E-Design, ohne Firmware x N
Wild-Karte og, 80Z +64K-Karte N
ohne Firmware 840,-
. Komp 64 S 940,-
wie Komp 64, jedoch mit abgesetzter
Tastatur mit 188 Funktionen.
Motherboard 48 K 399,-
8 Slots, alle IC’s gesockelt,
ohne Firmware, fertig geprüft
Motherboard 64 K
wie oben, mit 6502 und 39,- Klaus Jeschke für 2E komnati
Ü patible
„2.80, 64 K Hark. Sofwäre (knackt geschützte Programme)
| Viertstr. 3-13 Händleranfragen erwünscht! Appie-Info 1,- en (Porto)
6233 Kelkheim =
:® (06198) 7523
Alle Preise inklusive Mehrwertsteuer. 6 Monate
Garantie Versand erfolgt per NN oder Vorkasse
SE \
3
Peeker 1/86 23
rechts die Anzahl der bereits eingegebe-
nen Buchstaben (anfangs natürlich null)
und die laufende Nummer der Vokabel (1,
2, 3 ...) erkennen können. Der Cursor
steht auf der ersten Eingabezeile. Dort
geben Sie den ausländischen Teil der Vo-
kabel ein und schließen die Eingabe mit
Return ab. Es folgt die Übersetzung (Ende
wieder mit Return). Die nun erscheinende
Zeile erlaubt Ihnen folgende Möglich-
keiten:
—- (in Ordnung) J: Abspeicherung der Vo-
Kabel
— (in Ordnung) N: Korrektur der Vokabel
- RTN: Beendigung der Eingabe mit Ab-
speicherung der letzten Vokabel
— E: wie RTN, jedoch ohne Abspeicherung
der letzten Vokabel
— S: Sicherung der eingegebenen Voka-
belanzahl in der INFO-Datei
Unter S versteht das Programm das Ak-
tualisieren der eingegebenen Vokabelan-
zahl in der Informationsdatei, das norma-
lerweise nur bei RTN oder E stattfindet.
Bei der Eingabe einer größeren Vokabel-
menge empfehle ich das Sichern der Vo-
kabelanzahl nach ca. 100 Vokabeln, damit
der Verlust bei Ausfall der Anlage gering
bleibt. Es bleibt noch zu erwähnen, daß die
Länge der gesamten Vokabel 50 Buchsta-
ben und der deutsche oder fremdsprachli-
che Anteil der Vokabel 35 Buchstaben
nicht überschreiten darf. Daraus ergibt
sich bei einer DOS-losen und mit 40
Tracks initialisierten Datendiskette eine
Speicherungsmöglichkeit von ca. 2850
Vokabeln pro Diskettenseite.
Option 3:
Vokabeln berichtigen
Eine andere Leistung des Programms be-
steht darin, einzelne Vokabeln einer Datei
zu berichtigen (Option 3). Voraussetzung
dabei ist allerdings die Kenntnis der lau-
fenden Nummer (L) oder des fremd-
sprachlichen Anteils (F) der Vokabel (also
z.B. BOOK für BUCH). Die laufende Num-
mer steht, wie bereits erwähnt, beim Hin-
zufügen sowie beim Abfragen in der rech-
ten Ecke des Bildschirms. L muß in Tau-
sender- (T), Hunderter- (H), Zehner- (Z)
und Einer- (E) Stellen eingegeben wer-
den. Der Zugriff auf die Diskette erfolgt
direkt und der Apple findet die Vokabel in
sehr kurzer Zeit. Bei F hingegen muß dem
Programm der fremdsprachliche Begriff
mitgeteilt und — das ist wichtig — in der
gleichen Schreibweise wie der entspre-
chende Vokabelanteil in der Datei einge-
geben werden, d.h. auch die Leerstellen
sind von Bedeutung. Dann sucht das Pro-
gramm von vorne beginnend (bei der 1.
Vokabel) die ganze Datei nach der ange-
gebenen Vokabel ab. Dieser Suchvorgang
kann bei einer größeren Datei sehr lange
24
dauern. Viel besser ist der Zugriff mit L.
Hat Ihr Apple die Vokabel gefunden, liegt
es an Ihnen, diese zu berichtigen.
Bei der danach erscheinenden Menüzeile
stehen Ihnen vier Möglichkeiten zur Aus-
wahl:
— (In Ordnung) J: Abspeicherung der Kor-
rektur
— (In Ordnund) N: Korrektur der Korrektur
— E: Ende ohne Abspeicherung der Kor-
rektur
— W: zum Menü
Option 1:
Vokabeln abfragen
Das eigentliche Lernen der Vokabeln be-
ginnt über Option 1. Es existiert eine gan-
ze Reihe von Möglichkeiten, die Vokabeln
abzufragen. Allen gemeinsam ist das Be-
grenzen des abzufragenden Vokabelbe-
reichs. Nehmen wir einmal an, die Datei
enthalte 2000 Vokabeln, die der Lernende
nicht kennt. Dann ist es wohl kaum sinn-
voll, sofort den ganzen Bereich abzufra-
gen. Aus diesem Grund gestattet das Pro-
gramm, mit einer unteren (z.B. 500) und
einer oberen (z.B. 550) Grenze den zu
lernenden Bereich zu limitieren. Weiterhin
ist bei allen Abfragemöglichkeiten die
Festlegung der Abfragerichtung (z.B. Eng-
lisch/Deutsch oder Deutsch/Englisch) ob-
ligatorisch.
Nach der Eingabe des Dateinamens und
der Festlegung der Grenzen (untere und
obere) müssen Sie sich entscheiden, ob
der Computer abhängig von einer Fehler-
hilfe abfragen soll oder nicht.
Was bedeutet nun die Fehlerhilfe? Die In-
formationsdatei (Name.INFO) enthält ne-
ben der eingegebenen Vokabelanzahl zu
jeder Vokabel eine Fehlerstufe (1, 2 oder
3). Unter der Fehlerhilfe versteht das Pro-
gramm die Benutzung dieser Fehlerstufen
beim Abfragen.
Lernen mit/ohne Fehlerhilfe
Bei der Lerntechnik ohne Fehlerhilfe ge-
neriert der Apple eine Zufallszahl zwi-
schen der unteren und oberen Grenze des
abzufragenden Vokabelbereichs und holt
sich die jeweilige Vokabel von der Disket-
te. Danach wird der deutsche oder fremd-
sprachliche Anteil der Vokabel (je nach
Wahl der Abfragerichtung) auf dem Moni-
tor ausgegeben, und der blinkende Cursor
fordert Sie zur Eingabe der Übersetzung
auf. Nach Abschluß mit Return stellt der
Apple seine und Ihre Übersetzung gegen-
über. Mit E(nde) können Sie den Abfrage-
modus verlassen.
Vor der Erklärung der Abfragetechnik mit
Fehlerhilfe soll der Sinn der einzelnen
Fehlerstufen näher erläutert werden.
Eine neu hinzugefügte Vokabel besitzt zu-
nächst die Fehlerstufe 1. Wird eine Voka-
bel abgefragt und Sie wissen die Überset-
zung, erhöht das Programm (wenn er-
wünscht, s.u.) die begleitende Fehlerstufe
von 1 auf 2, d.h. alle Vokabeln, die von der
Stufe 2 begleitet werden, haben Sie be-
reits einmal richtig übersetzt. Bei nochma-
liger Kenntnis der Übersetzung geht die
Fehlerstufe 2 in die Stufe 3 über. Diese
Vokabeln (in der Stufe 3) wurden dann von
Ihnen mindestens zweimal richtig über-
setzt und müssen nur noch von Zeit zu
Zeit wiederholt werden. Es kann aber auch
vorkommen, daß eine einmalig richtig
übersetzte Vokabel (Fehlerstufe 2) wieder
in Vergessenheit gerät. In diesem Fall
rutscht die begleitende Fehlerstufe von 2
auf 1 zurück. Daraus ergibt sich also fol-
gende Systematik: Die Vokabeln mit der
Fehlerstufe
— 1 kennen Sie noch nicht oder sehr
schlecht,
— 2 haben Sie mindestens einmal richtig
übersetzt,
— 3 haben Sie mindestens zweimal richtig
übersetzt.
Ziel ist es natürlich, alle Vokabeln in die
Fehlerstufe 3 zu bekommen, um sie somit
sicher erlernt zu haben.
Bei der Abfragetechnik mit Fehlerhilfe er-
wartet das Programm von Ihnen die Anga-
be, ob die Änderungen der Fehlerstufen in
der INFO-Datei (Name.INFO) eingetragen
werden sollen oder nicht, d.h. Sie können
sich abhängig von den Fehlerstufen abfra-
gen lassen, ohne die neuen Fehlerstufen
einzutragen.
Natürlich gibt es auch die Möglichkeit, die
Fehlerstufen auf 1 zurückzusetzen (zu lö-
schen), d.h. in ihren Ausgangszustand zu
versetzen. Dabei muß man zwischen dem
Löschen der Fehlerstufen des ausgewähl-
ten, abzufragenden Vokabelbereichs (T =
Teilbereich) und dem Löschen der Stufen
aller Vokabeln (G = Gesamtbereich) diffe-
renzieren.
Schließlich gibt Ihnen der Apple noch die
Verteilung der Fehlerstufen in dem zu ler-
nenden Bereich an und fordert Sie auf, die
Abfrageart genauer zu bestimmen.
Es werden bei
— 1: nur Vokabeln der Fehlerstufe 1,
— 2: nur Vokabeln der Fehlerstufe 2,
— 3: nur Vokabeln der Fehlerstufe 3,
— A: alle Vokabeln im Fehlerstufenverhält-
nis 3/2/1,
— R: alle Vokabeln im gewählten Bereich
der Reihe nach abgefragt.
Bei A erfolgt das Abfragen bei Gleichver-
teilung (z.B. bei 30 Vokabeln: 10 Vokabeln
der Stufe 1, 10 Vokabeln der Stufe 2 und
10 Vokabeln der Stufe 3) der Fehlerstufen
innerhalb der Grenzen im Abfrageverhält-
Peeker 1/86
eek eiijijijiiriiiiiisinnrererrttirrrsrrrmlllll — — —
nis 3 Vokabeln der Stufe 1, 2 Vokabeln der
Stufe 2, 1 Vokabel der Stufe 3.
Haben Sie alle Angaben richtig beantwor-
tet und die Abfragerichtung bestimmt,
kann das eigentliche Lernen beginnen.
Nach der Eingabe Ihrer Übersetzung (oder
nur Return, falls Sie den Ausdruck nicht
wissen) stellt das Programm seine Über-
setzung gegenüber. Sie haben dann drei
Möglichkeiten, die nun erscheinende Me-
nüzeile zu beantworten:
— (Zufrieden) J: Sie waren mit Ihrer Ant-
wort zufrieden, und Ihr Apple ändert die
entsprechende Fehlerstufe von 1 auf 2,
von 2 auf 3 oder die Stufe 3 bleibt erhalten.
— (Zufrieden) N: Sie waren mit Ihrer Ant-
wort nicht zufrieden, und es erfolgt eine
Fehlerstufenänderung von 3 auf 2, von 2
auf 1 oder die Stufe 1 bleibt erhalten.
— E: Beendigung des Abfragemodus.
Es bleibt noch zu erwähnen, daß Sie bei
Beantwortung der einzelnen Fragen mit S
(selbe Parameter) alle Parameter (untere,
obere Grenze, Fehlerhilfe, Abfragerich-
tung usw.) bei der gleichen Datei neu wäh-
len können. Bei der Angabe der unteren
oder oberen Grenze des abzufragenden
Bereichs bewirkt das Drücken auf die Ta-
ste S das Übernehmen der alten, bereits
bestimmten Grenzen.
Option 7:
Disketten kopieren
Da sich das Eingeben der Vokabeln (Hin-
zufügen) als sehr arbeitsintensiv erweist,
ist es dringend zu empfehlen, von jeder
Datendiskette eine Sicherungskopie anzu-
fertigen, damit Sie bei Beschädigung der
Originaldiskette auf die Kopie zurückgrei-
fen können. Das Kopieren von Disketten
gestattet Ihnen die Hauptmenü-Option 7.
Damit für den Kopiervorgang genug Spei-
cherplatz vorhanden ist, wird ein kleines
BASIC-Programm mit dem Namen VOK-
.COPY geladen. Das eigentliche Kopieren
übernimmt allerdings ein Maschinenpro-
gramm mit dem Namen VOK.BCOPY, wel-
ches die Language-Card benötigt. Mit dem
Drücken auf die Leertaste (Space) leiten
Sie einen 40-Track- und mit „3“ einen 35-
Track-Kopiervorgang ein. Der weitere Dia-
log erfolgt mit der Leertaste. Es gibt jedoch
eine Ausnahme: Ist die Zieldiskette nicht
formatiert, können Sie nach dem ersten
Einlegen der unbehandelten Diskette mit
I(nit) statt Space eine Initialisierung der
Disk vor dem Kopiervorgang erreichen.
Nach vier Lese- und Schreibvorgängen ist
das Duplizieren beendet.
Peeker 1/86
4. Noch einen Tip
Ich empfehle Ihnen, die Vokabeln in 50er-
Schritten zu lernen (z.B. Vokabeln 1-50,
dann 51-100 usw.). Bei neuen Vokabeln
können Sie diese der Reihe nach (Abfra-
geart R) ohne Fehlereintrag zunächst ein-
mal kennenlernen. Danach fragen Sie nur
Vokabeln der Fehlerstufe 1 (am Anfang
oder nach dem Löschen sind alle Voka-
beln in der Fehlerstufe 1) mit Fehlereintrag
solange ab, bis Sie alle Vokabeln einmal
richtig übersetzt haben, d.h. alle in der
Fehlerstufe 2 enthalten sind. Jetzt ist es
ratsam, eine Pause von einem oder meh-
reren Tagen einzulegen und beim näch-
sten Lerntermin die Fehlerstufe 2 solange
abzufragen, bis alle Vokabeln entweder in
die Stufe 1 zurückgefallen (vergessene
Vokabeln) oder in die Stufe 3 aufgestiegen
sind (zweimal richtig übersetzt). Mit den
zurückgefallenen Vokabeln verfahren Sie
wie am Anfang. Sie sind also solange zu
wiederholen, bis alle wieder in die Stufe 2
aufgerückt sind. Danach sollten Sie eine
Pause einlegen (ca. 1 Tag) und darauf nur
Vokabeln der Stufe 2 abfragen, bis einige
nochmals in die Stufe 1 zurückgefallen
und andere in die Stufe 3 aufgestiegen
sind. Die Anzahl der in die Stufe 1 zurück-
gleitenden Vokabeln wird immer kleiner
werden. Am Schluß des Lernvorgangs be-
finden sich (fast) alle Vokabeln in der Feh-
lerstufe 3.
Natürlich sollten Sie die gelernten Voka-
beln von Zeit zu Zeit wieder auffrischen.
Wenn Sie Ihre Englischkenntnisse vertie-
fen oder auffrischen wollen, so können Sie
auf die bereits eingegebene Datei zurück-
greifen, die sich auf der Peeker-Sammel-
diskette befindet.
Kurzhinweise
1. Zweck:
Vokabellernprogramm
2. Konfiguration:
Apple Il+/e/c; 40 Z/Z; Kleinschreibung
nicht erforderlich; DOS 3.3 (ggf. für 40-
Spur-Laufwerke); kein ProDOSI
3. Test:
RUN VOK.TRAINER
dann über Menü-Option 1 (= Vokabeln
abfragen) deutsch-englische Übungsdatei
„GWS“ einlesen.
4. Sammeldisk:
VOK.TRAINER (Hauptprogramm)
VOK.COPY (Kopierprogramm)
VOK.PACK (Trainer-Hilfsroutinen)
VOK.BCOPY (Kopier-Hilfsroutine)
GWS.INFO (Deutsch-Englisch-Info) 4
GWS.VOK (Deutsch-Englisch-File) =
4 schule 44
ProDOS-Editor 1.0
Applesoft-Editor
unter ProDOS-Betriebssystem
von. Stiehl
1984, Diskette und Manual, DM 98,—
ISBN 3-7785-1024-X
Mit diesem neuen Editor — übrigens
der bislang einzige deutsche Pro-
DOS-Editor — wird dem Applesoft-
Programmierer ein Werkzeug zur ef-
fektiven Programmierung unter dem
Betriebssystem ProDOS gegeben,
denn die früheren Editoren sind alle-
samt unter ProDOS nicht mehr lauf-
fähig.
Unter anderem sind folgende Fea-
tures implementiert worden:
Zeilenorientierter Editor mit jedem er-
denklichen Redigierkomfort (Insert,
Delete, Tab, Restore, freie Cursorbe-
wegung in allen vier Richtungen, Einga-
be von Ctrl-Buchstaben in Applesoft-
Zeilen usw.)
Renumber (Zeilen-Umnumerierung)
Xreference (sortierte Variablenliste)
Suchen von Tokens, Strings und Varia-
blen
dezimale und hexadezimale Umrech-
nungen
Ausführung von Monitorbefehlen aus
dem Editor heraus
Listen des Applesoft-Programms in
speicherinterner Form als Hex-Dump
Adressen
im gesamten
einschließlich der
Suchen von Hex-Folgen,
oder Speicherstellen
RAM-Bereich
Language-Card
frei definierbare Tastatur-Macrobefehle
Der Applesoft-Editor liegt in einem
von ProDOS geschützten Bereich
und läßt sich per Tastendruck vor-
übergehend abschalten und ebenso
einfach wieder aktivieren.
Gerätevoraussetzung: Apple Il+, Ile
oder Ilc, 40 Zeichen/Zeile
Hüthig Software Service,
Postfach 10 28 69,
D-6900 Heidelberg
25
Verkauf Software
Apple: Public Domain: Pro
Volume DM 15,— Games, Schach,
Graphic u.v.a.m. Derw. Lehrerpro-
gramme, 'Mini-Logo'! Gratisinfo:
Fa. Walt. Muhle, Waldwinkel 3,2105
Seevetal 3
PIRATE DEFENCE 2.0
Kopierschutz Gehört zu den
sichersten Schutzsystemen
Deutschlands. Für DOS, ProDOS,
DIVERSI u. a. Info (50 Pf), Chr.
Bregler, Tulpenstr. 2, 7519 Eppin-
gen. Händleranfragen erw.!
MULTIPLAN (Macintosch)
DM 290 APPLE ACCESS (lle/llc)
DM 120 dAdress (dBase || erford.)
DM 120 dLager (dBase Il erford.)
DM 120 U. Blaseg 0 7529-408
P-Code Disassembler DM
50,-, K. Seiler, Willy-Andreas-
Allee 1, 7500 Karlsruhe 1
-Kredit-Programm- für App-
le- Ilc DM 40,- inkl. Must. Fa.
Stampflmeier, 82 Rosenheim, von
der Tannstr. 11
Print Shop Newsroom etc. /
Apple ändere ich für Ihr Drucker-
IF! Disk-Copy für EHRING & ER-
PHI Super-Prgm. auch PCTEXT/
PC-1500 Rüter Rah. Str. 65, 4955
H. 05703/672
Apple Il-Spiele-Programmie-
rung: Hires-Schrift und Sprites
(Rout. mit Sourcefiles und Erklä-
rung): Disk nur DM 28, -
Tel: 0261/63586
Orgin. Flight Simulator ||
100- die verlassene Burg 30,-
T: 04101/34327
Verkauf Hardware
128 auf 512K DM 798,—
Bausatz DM 298,-, ab 17h,
Telefon 089/985889
Für weitere Informationen zu einem
Centronic Parallel Grafik
Interface, DM 140 VHB, T: 06142/
60 34.43
Fernschreiberinterface am
Gameport m. Programm DM 79,—
P. Benner, Hubertusstr. 131, 4150
Krefeld
Apple Il komp. mit 80 Zeichen-
Pal-V24-Karten u. Paddle User-
Buch für DM 700,-, T. 06202/16513
Apple Ilc Monit. Maus,
Joyst. Imagewriter, Olivetti-Pra-
xis 30 mit Seriellem Interf., 6 Mon.
Tel: 02161/26698
NEC P2 incl. V. 24, Autom.
Einzelblatteinzug, Kabel für Apple
IIcod. MAC, 7 Farbbänder statt NP
3428 nur DM 2308. T: 08806/
338
Soundchaser Musik-System
mit Softw. & Keyboard, Tel:
04743/5500
Apple Il + kompatibler IBM
Gehäuse 64 KB+Z80 900,-
Laufwerk TEAC 55F 400,- ERPHI
kon. 250 T: 04101/34327
Matrixdrucker Gemini 10X,
Thermodrucker Trendcom 200, 2
Cumana LW, IF (Text-Graph), 80Z,
Monitor, kompl. DM 1350,-, Mo-
Do 02173/30384, Fr-So 0641 /
33169
Apple Il komp. Z80, 80/2, Er-
phi-Cont., 2X620K Lw, Wordstar-
Tastatur, Monitor, Softw., DM 2800
Tel: 0831/95558
Verk. Apple lic + Monitor
+UCSD Pascal + Reference ma-
nual Vol. 1 und 2. T: 089/
8507173 ab 18h.
Apple Il+ orig., 64K, VB DM
2400,- 80Z-Karte 1/2 Jahr für DM
120,- Tel: 06103/34290
Video-Interface zum Ein-
blenden von Schriften mit dem
Apple II DM 1075,- bei Ulrich Kall-
weit, Haus Mallinckrodt, 5802 Wet-
ter 1
Apple lic + Lit. + ASS.-Tools
u. ASS.- Kurs, VB DM 2600, 089 /
6123752
Tastatur, programmierbar f.
Apple Il im IBM-Look VB. DM 200
T: 0203/47 1265
Apple Ilc, 2.LW, Maas; CP/M-
Karte, Software, VB DM 4600;
0221/761845
Verkaufe Drucker-Star mit
Graf-Star Karte zus. DM 700,-
Tel: 02384/3909
APPLE REPARATUREN
(auch compatible M-boards, z.B.
Atlas, Arca, CES, Datastar,
Dipa, Lasar, Mewa,
PC-48 + 64, Plato, Radix, o
ae.) sowie Zusatzkarten und
Disk-Drives führt unser Speziali-
stenteam mit mehr als 5-jähriger
Kunden- und Reparatur-Dienst-Er-
fahrung, garantiert zuverlässig und
besonders kostengünstig aus.
Bitte genaue Fehlerangabe sowie
Tel. Nr. für evtl. Rückfragen nicht
vergessen.
Auf Wunsch Kostenvoranschlag.
aaa-electronic gmbh
Habsburgerstr. 134, 7800 Freiburg,
Tel. 0761/276864, Tx. 772642 aaad
Hard- und Software für Apple-
Computer gesucht. Wer schreibt
gute Software? Auch Gebrauchtes
angenehm. Zahle Höchstpreise!
Suche noch Leute, die nebenbei
verdienen wollen. Zuschriften
Chiffre P1005
PEEKER 494994
Börse
** Neue Bücher für den Apple Il xx
Elektronik- und Graphik-Pro-
gramme
Die Programm-Fundgrube zu fol-
genden Themen: Statistik, Filter,
Netzwerke, Laplace- und Fourier-
Transf., Komplexe Rechnung, Dia-
gramme usw., zahlr. Abb., 184 S.,
16,5 x 23,5 cm, DM 39,80
Apple II — leicht program-
miert
Der Wegweiser zum eigenen Pro-
gramm: Zählen, Schleifen, Strings,
Eingabe, Druckformatierung, Adress-
verw. usw., 96 S., 16,5 x 23,5 cm,
DM 22,80
BASIC-Tricks für den Apple Il
Die Trickkiste für die professionelle
Programmgestaltung: Eingabe, Me-
nüs, Sortieren, Listengestaltung,
Fehlererkennung/Korrektur, Datei-
en usw., 144 S., 16,5 x 23,5 cm,
DM 29,80
Bei Bestellung bitte DM 2,50 für
Porto und Verpackung addieren.
beam-Verlag,
Pf. 1148P, 355 Marburg
KRRFFFFIITTIIEIEEI AK
Ankauf Hardware
Günstiges auch gebrauch-
tes Koala Pad o. ä. für A. II+
T: 021 96/2463
Ankauf Software
Datenbank Literaturverwal-
tung für Apple Ile sucht
Telefon 06162/73233
Komfortable Apple Fak-
turierung ges. für PRODOS, mit
Statistik, Gutschrift, Rückstand,
USW.
Suche Spiele für Apple
T: 02302/89694
der in dieser Ausgabe vorgestellten
Produkte stehen Ihnen die Produktkarten zur Verfügung
Bitte verwenden Sie für Kleinanzeigen die vorgedruckten Antwortkarten in
diesem Helft.
26
Peeker 1/86
Für Ihre Unterlagen
Abonnement bestellt
En
Ja, ich möchte Peeker abonnieren.
Liefern Sie mir Peeker ab Ausgabe ............... zum Jahresbezugspreis
von DM 72,- (Inland) inkl. MwSt. Die Lieferung erfolgt frei Haus. Porto, Verpak-
kung und Zustellgebühren übernimmt der Verlag. Der Jahresbezugspreis für das
Ausland beträgt DM 72,- inkl. MwSt., zzgl. DM 18,— Versandspesen.
am:
Vertrauensgarantie:
Ich habe davon Kenntnis genommen,
daß ich die Bestellung schriftlich
durch Mitteilung an den Dr. Alfred
Hüthig Verlag, Postfach 102869,
6900 Heidelberg 1 innerhalb von 7
Tagen widerrufen kann. Zur Frist-
wahrung genügt die rechtzeitige Ab-
sendung des Widerrufs (Datum des
Ich wünsche jährliche Berechnung durch:
[_] Verlagsrechnung [_] Abbuchung von meinem Bank-
bzw. Postscheckkonto
28 Abo-Karfe
Poststempels).
Peeker Bank / PschA
Leserservice
Postfach 102869 Bankleitzahl Kto.-Nr.
6900 Heidelberg 1
Datum Unterschrift
Für Ihre Unterlagen
Folgende Bücher bestellt:
EEkKER
Bitte senden Sie mir gegen Rechnung folgende Bücher:
2000
4,
am:
bei:
Peeker
Versandbuchhandlung
Postfach 102869
6900 Heidelberg 1
Für Ihre Unterlagen
Folgende Disketten
und Programme bestellt:
Datum Unterschrift
Wa Buch-Karte
EEkKER
Em
© Bitte senden Sie mir gegen Rechnung folgende Disketten:
oO U] Peeker-Sammeldiskette, einzeln UL] Apple DOS 3.3, Begleitdiskette, DM 28,—
Bag Disk# _____, Disk# [| ProDOS, Band 1, Begleitdiskette, DM 28,-
Disk# —— Disk#+ [] ProDOS, Band 2, Begleitdiskette, DM 28,—
2 Preis je Disk DM 28,- (einzeln) OD) Apple Assembler, Begleitdiskette, DM 28,-
N) OD) Peeker-Sammeldiskette, UL] ProDOS-Editor 1.0, Programm, DM 98,-
En im Fortsetzungsbezug D) MMU 2.0, Programm, DM 98,-
O ab Disk + D INPUT 2.0, Programm, DM 98,-
(Mindestbezug 6 Disketten) UL] Softbreaker 1.0, Programm, DM 48,—
Preis je Disk DM 20,- L] DB-Meister, Programm, DM 290,—
bei: Neben DOS-Disketten auch liefern Q Superplot, Programm, DM 48,-
Peeker O D CP/Mja 7 CP/M nein DL] Superquick, Programm, DM 48,—
Inei [] Turtle Graphics, Programm, DM 98,-
Softwareabteilung 177) I Pascaljia DJ Pascal nein g
Postfach 102869
6900 Heidelberg 1 Pe -.
Firma
Abteilung
Vertrauensgarantie:
Ich habe davon Kenntnis genommen, daß ich die Bestellung
schriftlich durch Mitteilung an den Dr. Alfred Hüthig Verlag,
Postfach 102869, 6900 Heidelberg 1 innerhalb von
14 Tagen widerrufen kann. Zur Fristwahrung genügt die
rechtzeitige Absendung des Widerrufs (Datum des
Poststempels).
Datum
Unterschrift
Verlagshinweis:
Das Abonnement verlängert sich zu den jeweils gültigen
Bedingungen um ein Jahr, wenn es nicht 2 Monate vor
Jahresende schriftlich gekündigt wird.
.
Karte bitte vollständig ausfüllen
Vorname, Name
Karte
Ri
=
D
PLZ/Ort
Telefon mit Vorwahl
Buch
Karte bitte vollständig ausfüllen
Vorname, Name
PLZ/Ort
Telefon mit Vorwahl
=
E
Q
-
E=
a
E
POSTKARTE
Peeker
Leserservice
Dr. Alfred Hüthig Verlag
Postfach 102869
6900 Heidelberg 1
POSTKARTE
Peeker
Buchabteilung
Dr. Alfred Hüthig Verlag
Postfach 102869
6900 Heidelberg 1
POSTKARTE
Peeker
Softwareabteilung
Dr. Alfred Hüthig Verlag
Postfach 102869
6900 Heidelberg 1
INPUT 2.0
Ein Bildschirm-
Maskengenerator
für DOS 3.3 und ProDOS
von. Stiehl
1984, Diskette und Manual, DM 98,—
ISBN 3-7785-1021-5
„Input 2.0 liegt wahlweise in der Bank 1
oder Bank 2 der Language Card und wird
durch einen kurzen Driver in den unteren
48K aufgerufen.
Für jedes Feld der Bildschirmmaske lassen
sich u.a. definieren: Feldlänge (bis zu 255
Zeichen) — Vtab — Htab — Datentyp (insge-
samt 8 Typen) — Scrollflag (starre oder dyna-
mische Maske) — Ctriflag — Füllflag — Lösch-
flag — Bildschirmflag (40- oder 80-Z-Darstel-
lung). Innerhalb eines Eingabefeldes besteht
jeder denkbare Redigierkomfort (Insert, De-
lete, Rubout, Restore usw.).
Gerätevoraussetzung: Apple Ile oder IIc; fer-
ner Apple II+ im 40-Zeichenmodus
MMU 2.0
Memory Managements
Utilities
für die Apple lle 64K-Karte
DOS 3.3 (und ProDOS)
von. Stiehl
1984, Diskette und Manual, DM 98,—
ISBN 3-7787-1023-1
Insgesamt enthält die neue „MMU 2.0"-
Diskette über 25 Programme, die neue
Einsatzmöglichkeiten für die Extended 80
Column Card (erweiterte 80-Z-Karte =
64K-Karte für den Apple Ile) erschließen.
Ein Teil der Programme laufen auch auf
dem Apple II Plus, doch ist „MMU 2.0"
primär für 64K-Karte-Besitzer gedacht.
Gerätevoraussetzung: Apple Ile mit 64K-
Karte oder IIc
Softbreaker 1.0
Eine softwaremäßige Interrupt-Utility
für die Apple lie 64K-Karte
von U. Stiehl
1984, Diskette und Manual, DM 48,-
ISBN 3-7785-1022-3
Softbreaker ist ein Assemblerprogramm, mit
dessen Hilfe Programme, die sich von der
64K-Karte (= Extended 80 Column Card für
den Apple Ile) starten lassen, unterbrochen,
gespeichert, geladen und exakt an der Stelle
der Unterbrechung fortgeführt werden kön-
nen. Dadurch ist es auch möglich, Siche-
rungskopien von sogenannten kopierge-
schützten Programmen herzustellen.
Mit Softbreaker unterbrochene Programme
werden komplett, d. h. die ganzen 64K ein-
schließlich Language Card, in nur ca. 11 Se-
kunden auf einer formatierten Diskette gesi-
chert.
Gerätevoraussetzung: Apple Ile mit 64K-
Karte
Hüthig Software Service,
Postfach 10 28 69, D-6900 Heidelberg
| Kyan-Pascal
Kyan-Pascal ist ein völlig neuartiges Pascal-System für den Apple Il+/e/c, das von der Firma Kyan Software in San Francisco
entwickelt wurde und als Version 1.0 im April dieses Jahres erstmals ausgeliefert wurde. Inzwischen gibt es die neueste Version
1.2 vom 14. August 1985.
Vor- und Nachteile von Kyan-Pascal
1. UCSD-Pascal-Implementierungen für
den Apple Il laufen zwar unter dem
6502-Prozessor und sind deshalb auf
den Apple bestmöglich angepaßt,
doch wird nur der relativ langsame
Pseudo-Code erzeugt. Z80-Pascal-
Implementierungen sind demgegen-
über zwar in der Regel als Vollcompi-
ler ausgelegt, doch wird erstens eine
Z80-Karte benötigt und zweitens läßt
die Anpassung an den Apple Il, z.B.
bezüglich der HGR-Grafik, zu wün-
schen übrig.
Kyan-Pascal erzeugt einen echten
6502-Objektcode. Es vereinigt damit
die Geschwindigkeitsvorteile eines
Vollcompilers mit der bestmöglichen
Anpassung an den Apple Il.
2. Kyan-Pascal läuft unter allen denkba-
ren Apple-Konfigurationen (II+/e/c).
Man kann es bereits mit Nutzen ein-
setzen, wenn man nur über eine Mini-
malkonfiguration mit Apple II+/e oh-
ne 80-Zeichenkarte und ohne zweites
Laufwerk verfügt, weil auf der (unge-
schützten) Programmdiskette noch
über 40.000 Bytes für die Arbeitsdatei
frei sind. Wer besser ausgestattet ist,
kann eine 80-Zeichenkarte, ein zwei-
tes Laufwerk sowie eine RAM-Disk
verwenden.
3. Kyan-Pascal läuft unter dem (mitge-
lieferten) Betriebssystem ProDOS
und kann deshalb auch in Verbindung
mit größeren Massenspeichern (Fest-
platten sowie 80-Spur-Disketten
usw.) problemlos eingesetzt werden.
4. Im wesentlichen besteht Kyan-Pascal
aus einem sehr brauchbaren Full-
screen-Editor (in zwei Versionen für
40- und 80-Zeichendarstellung), der
auch als Textverarbeitungsprogramm
benutzt werden kann, einem Compi-
ler und einer Runtime-Library (Biblio-
theksdatei).
Peeker 1/86
. Der
Fertig compilierte Programme können
in Verbindung mit der Bibliotheksdatei
unabhängig von Kyan-Pascal als Pro-
DOS-Systemdateien gestartet wer-
den. Die Weitergabe der Runtime-
Library wird von der Firma Kyan Soft-
ware ohne Zahlung von Lizenzgebühr
gestattet.
Kyan-Pascal-Befehlssatz lehnt
sich eng an Standard-Pascal an, so
daß beispielsweise Befehle wie GO-
TOXY usw. fehlen. Für String-Verar-
beitung und HGR-Grafik werden je-
doch Include-Dateien mitgeliefert.
Dieser zunächst gravierend erschei-
nende Nachteil wird jedoch — wie wir
meinen — durch zwei entscheidende
Vorteile aufgehoben:
a) Ein laufendes Kyan-Pascal-Pro-
gramm befindet sich in der von Apple-
soft her gewohnten Monitor-Umge-
bung, d.h. der Pascal-READLN-
Befehl wird z.B. durch die Monitor-
Routine GETLN (entspricht dem
Applesoft-INPUT-Befehl) realisiert.
Der Aufruf von Monitor- oder gar
Applesoft-ROM-Routinen ist deshalb,
wenn man auf die Zero-Page Rück-
sicht nimmt, grundsätzlich möglich.
b) In einen Kyan-Pascal-Quelltext
können beliebig viele echte 6502-
Quelltexte eingebaut werden. Man
kann deshalb Kyan-Pascal auch als
6502-Assembler benutzen. Ein Bei-
spiel-Programm macht dies deutli-
cher:
PROGRAM DEMO;
BEGIN
WRITELN (’Jetzt 6502’);
4a {Beginn Assembler}
HOME EQU $FC58
BELL EQU $FBDD
JSR HOME ;Bildschirm löschen
JSR BELL ;Piepston ausgeben
{usw.}
#({Ende Assembler}
WRITELN (Das war 6502’);
END.
Auf diese Weise ist es prinzipiell
möglich, beliebige Assemblerrouti-
nen in Kyan-Pascal-Programme ein-
zubauen und darüber hinaus die in
Standard-Pascal nicht vorhandenen
Befehle zu kompensieren.
6. Kyan-Pascal scheint uns sowohl für
Anfänger, insbesondere auch im
Schulunterricht, als auch für Fortge-
schrittene bestens geeignet zu sein.
Anfänger können sich auf den Stan-
dard-Befehlssatz beschränken, wäh-
rend Fortgeschrittene die Assembler-
Features ausnutzen können. Übri-
gens erzeugt Kyan-Pascal beim
Compilieren ein echtes 6502-Quell-
code-Listing, und zwar auch für die
Pascal-Befehle, so daß ein nachträgli-
ches Optimieren des Assembler-
Quellcodes möglich ist.
Einladung zum Sammelbezug
Kyan-Pascal kostet in den USA 69.95
Dollar. Unter Berücksichtigung der Aus-
landseinfuhr- und Überweisungskosten
muß man umgerechnet über DM 200,—
bezahlen. Damit Sie diese interessante
Pascal-Implementierung so günstig wie
möglich beziehen können, bieten wir
Ihnen als Peeker-Serviceleistung die
Teilnahme am Sammelbezug an. Als
Stückpreis* haben wir DM 170,- (inkl.
Porto, Verpackung und MwSt) festgelegt.
Voraussetzung hierfür ist allerdings, daß
eine ausreichende Anzahl von Vorbe-
stellungen eingeht. Werten Sie bitte die-
se Aktion als einen Versuch, Software im
Sammelbezug preiswert zu erwerben.
Sollten sich nicht genügend Interessen-
ten melden, so müssen wir dieses
Service-Angebot wieder vergessen.
Kyan-Pascal ist freilich auch bei ein-
schlägigen Importeuren (für z. Zt. ca. DM
270,-) erhältlich.
Wie wird’s gemacht? Senden Sie uns bis
spätestens 31.1.1986 Ihre Bestellung über
Kyan-Pascal zum Preis von DM 170,- inkl.
Versandspesen. Teilnehmen können alle
Peeker-Leser. Ihre Peeker-Redaktion
* Diskette + 100seitiges Handbuch
kurzberichte 44
29
Applesoft-HGR-
Erweiterung
von Klaus Schäfer
Die Grafik-Befehle des Applesoft-BASIC
sind ziemlich spartanisch. Mit dem Ma-
schinenprogramm AGE ist es möglich, ein
Hires-Bild individuell zu verändern. Das
Programm wird über den Ampersand-Vek-
tor angesteuert und ist somit leicht in ei-
nem BASIC-Programm einsetzbar. AGE-
„DEMO zeigt eine Anwendung der neuen
Befehle.
1. Die neuen Befehle
Das einfachste neue Kommando ist das &-
Zeichen allein. Durch diesen Befehl wird
eine Liste der verfügbaren Kommandos
sowie deren Syntax ausgegeben:
Verfügbare Kommandos:
TURN <BUF>,<PART>
REFLECT <BUF>,<PART>
INVERT <BUF>,<PART>
SWAP <BUF>,<BUF>
COPY <BUF>,<BUF>
MERGE <BUF>,<BUF>
SHOW <BUF>
SHRINK <BUF>,<PART>
WIDE <BUF>,<PART>
Die Parameter können sowohl als Zahlen
als auch als Variablen angegeben werden.
BUF steht für die Bildschirmseite. Dabei
bedeutet 1 = HGR und 2 = HGR2.
PART (im Bereich 0-4) gibt die folgenden
Bildschirmausschnitte an:
1 links oben (Zeile 0-95 und Spalte O-
139);
2 = rechts oben (Zeile 0-95 und Spalte
140-279);
3 = links unten (Zeile 96-191 und Spalte
0-139);
4 = rechts unten (Zeile 96-191 und Spal-
te 140-279);
0 = der ganze Bildschirm.
30
ın Assembler
Allen folgenden Befehlen muß das &-Zei-
chen vorangestellt werden.
— TURN dreht einen Bildschirmausschnitt
um 180 Grad, das Bild wird also auf den
Kopf gestellt. Die Parameter sind hierbei
BUF, also entweder 1 für HGR oder 2 für
HGR2, und PART im Bereich 0-4.
- REFLECT spiegelt einen Bildschirmaus-
schnitt (also spiegelverkehrte Darstellung
des Bildes), wobei die Parameter die glei-
chen sind wie bei TURN.
— INVERT invertiert einen Bildschirmaus-
schnitt, d.h. es wird das Negativ des Bildes
erzeugt: schwarz auf weiß wird weiß auf
schwarz. Auch hier sind die Parameter
wieder identisch.
Die Befehle SWAP, COPY und MERGE
befassen sich jetzt nicht mehr mit einem
Bildausschnitt, sondern nur noch mit dem
ganzen Bild.
— SWAP vertauscht die beiden Hires-
Bilder.
— COPY kopiert eine Bildschirmseite in die
andere.
— MERGE verschmelzt beide Bilder zu
einem. Der erste Parameter BUF ist hier
die Ausgangsseite, also 1 oder 2, der
zweite Parameter BUF bezeichnet den Be-
stimmungsbildschirm.
— SHOW ist der einfachste Befehl. Er be-
wirkt nur, daß die jeweilige Seite gezeigt
wird, ohne diese zu löschen (was bei HGR
oder HGR2 passieren würde).
Die komplexesten Befehle sind WIDE und
SHRINK.
— SHRINK verkleinert ein ganzes Hires-
Bild zu einem Viertel der Ursprungsgröße.
Als Parameter ist hier BUF der Ausgangs-
bildschirm (also die Seite, in der das zu
verkleinernde Bild steht) und PART der
Teil des anderen Bildschirms, in den ver-
kleinert werden soll.
— WIDE kehrt die Wirkung von SHRINK
um, vergrößert also ein Viertel-Bild zu ei-
nem ganzen. Parameter hier sind die Aus-
gangsseite BUF und der Viertel-Ausschnitt
PART. Vergrößert wird wieder in die ande-
re Seite.
Beispiele:
&INVERT 2,1 (invertiert HGR2 links oben).
&TURN 1,0 (dreht die ganze HGR).
& COPY 1,2 (kopiert HGR nach HGR2).
& SWAP 1,2 (vertauscht HGR und HGR2).
&MERGE 1,2 (vermischt HGR und HGR2
in die HGR2).
& SHOW 2 (zeigt HGR2).
&WIDE 2,1 (vergrößert HGR2 links oben
nach HGR)
&SHRINK 2,4 (verkleinert HGR2 nach
HGR rechts unten)
2. Änderungsmöglichkeiten
Das Programm kann recht einfach erwei-
tert werden. Hierzu muß lediglich die
Kommandbotabelle (Zeile 131-160) sowie
die Tabelle der Routinenadressen erwei-
tert und die eigene Routine angehängt
werden. Außerdem ist darauf zu achten,
daß eventuell die Startadresse des Pro-
gramms geändert werden muß, da nur
noch wenige Bytes bis HIMEM frei sind.
Gekürzt werden kann noch leichter, da
einfach das Kommando und die entspre-
chende Adresse aus der Kommando- und
Adreßtabelle gestrichen werden muß. Es
genügt dann, die Routine einfach wegzu-
lassen.
3. Beschreibung der Routinen
Das Programm wird unter DOS 3.3 mit
BRUN AGE
gestartet. Die Zeilen 36-49 initialisieren
das Programm, d.h. der Ampersand-Vek-
tor wird auf den Programmstart gerichtet
Peeker 1/86
und HIMEM so gesetzt, daß es nicht durch
Strings überschrieben wird.
In Zeile 50-117 befindet sich der Com-
mand-Interpreter. Hier werden die Kom-
mandos aus der Kommandotabelle (131-
160) der Reihe nach mit dem tatsächlich
eingegebenen Kommando verglichen.
Wenn in Leerzeichen erreicht wird, ist das
richtige Kommando gefunden. Das Ende
der Tabelle zeigt, daß kein gültiges Kom-
mando gefunden wurde. Falls der Befehl
gültig ist, wird die Adresse der Routine aus
der Adreßtabelle entnommen und auf dem
Stack abgelegt, um dann mit einem RTS
angesprungen zu werden.
Von 176-227 steht die Hauptroutine IN-
VERT. Diese besteht aus einer großen
Schleife, die die 192 Bildschirmzeilen
durchzählt (als Zählregister dient das X-
Register). Die Adresse der jeweiligen Zei-
le steht in COUNT1, im Y-Register werden
die 40 Bytes einer Zeile durchgezählt. (Je-
des Byte besteht aus 8 Bits, wovon 7
einen Punkt darstellen; 40 x 7 ergibt also
unsere 280 Punkte in X-Richtung).
REFLECT (228-300) arbeitet im Prinzip
genauso, wobei hier jedoch nicht invertiert
wird, sondern der am weitesten rechts ste-
hende Punkt einer Zeile ganz nach links
gesetzt wird usw. Dieses Verschieben in-
nerhalb eines Bytes erledigt die Unterrou-
tine ROTATE (556-586).
Bei TURN (301-392) wird ähnlich wie beim
Spiegeln innerhalb einer Zeile vertauscht,
dann jedoch noch die oberste mit der un-
tersten Zeile vertauscht. Die Zähler laufen
wie bei REFLECT.
AGE.DEMO
10® REM AGE-Demo
11® REM
128 PRINT CHR$ (4)"BRUN AGE"
13® REM Zeichnen des Bildes
149 PRINT CHR$ (21)
159 HGR : HGR2 : HCOLOR= 3
168 FOR I = ß TO 279 STEP 4
170 J=1Ix 96 / 149
180 HPLOT 9,8 TO I,191
198 HPLOT 9,9 TO 279,J
200 NEXT I
21® REM Verkleinern nach HGR
220 & SHOW1
238 FOR I = 1 TO 4: & SHRINK2,I:
240 REM Spiegeln und drehen
250 & TURNI1,1
260 & REFLECT1,2
278 & TURN1,2
280 & REFLECT1,3
290 & INVERT1,®
30® REM Noch einmal verkleinern
3l® FrRI=1T0 4
320 & SHOW2
330 & SHRINK1l,I
34® NEXT I
350 REM Drehen und wenden
36d & TURN2,®
37® & REFLECT2,®
380 & SHOW
39® REM Wieder vergrößern
400 & WIDE2,1
Peeker 1/86
COPY, SWAP und MERGE sind in einer
Routine integriert (414-503). Auch hier
werden wieder die 192 Bildschirmzeilen
durchgezählt. Entweder wird eine Zeile auf
die andere kopiert oder die zwei Zeilen
werden vertauscht oder gemeinsam mit
EOR verknüpft.
Die folgende Unterroutine CALCCUR wird
von fast jeder Hauptroutine benutzt. Hier
wird die Adresse des am weitesten links
stehenden Bytes einer Zeile (im X-Regi-
ster) berechnet. Dies geschieht durch die
Interpreter-Routine HPOSN.
Noch einfacher ist die nächste Hauptrouti-
ne SHOW zu verstehen. Hier werden nur
die jeweiligen Softswitches betätigt, um
die gewünschte Seite anzuzeigen.
Die Zeilen 587-610 beinhalten die Unter-
routine TESTBUF. Hier wird das eingege-
bene Kommando darauf abgesucht, wel-
che Grafik-Seite angesprochen werden
soll. Diese Seite wird dann entsprechend
gesetzt (Adresse $00E6 in der Zero Page).
Ab 622 steht die Routine HILFE. Dieser
Programmteil gibt die Kommandotabelle
auf dem Bildschirm aus.
Die nächste Unterroutine wird von
SHRINK verwendet, um zwei Bytes in ei-
nes zu verwandeln. Dies geschieht da-
durch, daß nur jedes zweite Bit eines
Bytes, also nur jeder zweite Punkt, ver-
wendet und hintereinander in ein Byte hin-
eingeschoben wird.
TESTPART ab Zeile 672 fragt das einge-
gebene Kommando dahingehend ab, wel-
cher Bildschirmausschnitt verlangt wird.
Es werden dann in PAR + 1 und PAR + 2
Al® REM Kommandos zeigen
420 TEXT : HOME
430 &
AGE
(nur Quellcode; Objektcode s.u.)
ORG $919®
AGE — Applesoft-Grafik-
Erweiterung
von Klaus Schäfer
vovoı91 AUuUDH
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
COUNT1 EQU
grafik 4
die X- und Y-Koordinaten der linken, obe-
ren Ecke eines Ausschnitts gespeichert.
Die Routine SHRINK ab 707 schließlich
verkleinert eine Grafik-Seite auf ein Vier-
tel. Es werden hier zwei geschachtelte
Schleifen verwendet, die erste zählt die
Zeilen des ganzen Bildes, die zweite die
des verkleinerten. SHMER verkleinert
dann zwei Bytes zu einem, und da nur
jede zweite Zeile des Originalbildes ver-
wendet wird, ergibt sich eine Verkleine-
rung auf ein Viertel.
WIDE (Zeile 826 ff.) kehrt die Wirkung von
SHRINK genau um. Es wird hier ein Byte
verdoppelt, indem jedes Bit doppelt ge-
speichert wird, und jede Zeile des Aus-
schnitts wird im Ergebnis zweimal ver-
wendet.
Kurzhinweise
1. Zweck:
Ampersand-Erweiterung der Grafik-Be-
fehle in Applesoft.
2. Konfiguration:
Apple Il+, Ile oder Ilc; DOS 3.3 (kein
ProDOS wegen HIMEM-Änderung).
3. Test:
RUN AGE.DEMO
4. Sammeldisk:
AGE.DEMO
(Applesoft-Demo-Programm)
T.AGE
(Big-Mac-Quelltext)
AGE
(Maschinenprogramm).
COUNT2 EQU $FC
EQU $FE
EQU $FF
EQU $399
AMPVEC EQU $3F5
ERROR EQU $D412
ADDON EQU $D998
COMBYTE EQU $E74C
GETBYTE EQU $E74F
HPOSN EQU $F4ll
COUT EQU $FDED
*
* Hier wird die Adresse des
* Amper-Interpreters in den
* Vektor von Page 3 gepokt.
*
LDA #$4C
STA AMPVEC
LDA #<START
STA AMPVEC+l
STA HIMEM
LDA #>START
STA AMPVEC+2
STA HIMEM+1
RTS
*
* Der Amper-Interpreter prüft
* die Kommandos auf ihre Syntax
*
S
TART BNE NORMCOM
JMP HILFE
NORMCOM LDX #$FF
LDA #99
31
STA COMCOUNT ASC "'MERGE ' * Bestimmung der Anfangszeile
* ASC "'<BUF>,<BUF>' .
* Initialisierung der Pointer HEX 8D LDX PAR+2
» ASC "SHOW <BUF>' STX Z1
STARTLOl LDY +#$FF HEX 8D
STARTLO2 INX ASC "SHRINK <BUF>' Bestimmung der letzten Zeile
INY ASC "',<PART>'
LDA COTAB1l,X HEX 8D CLC
ASC "WIDE <BUF>' LDA
wenn $2@, dann ist das Kommando ASC "',<PART>' ADC
gefunden, weil alle Buchstaben HEX 8DFF LSR
korrekt verglichen wurden. STA Z2
Diese Tabelle enthält die .
CMP_ #$20 Adressen der einzelnen Rou- * Bestimmung der momentanen Zeile
BEQ GEFUNDEN tinen, die durch ein RTS *
aufgerufen werden MIRRLOl LDX Z1
Wenn das Ende der Kommando- JSR CALCCUR
tabelle erreicht wird, wurde OTAB2 DA DREHEN-1 LDA HBASL
das Kommando nicht gefunden. DA MIRROR-1 STA COUNTI
DA INVERT-1 LDA HBASH
CMP #$FF DA TAUSCH-1 STA COUNTI+1
BEQ SYNERR DA KOPIEREN-1 LDY PAR+1
DA MISCHEN-1 STY Ql
Jetzt wird mit dem eingetippten DA ZEIGEN-1 LDY PAR+3
Zeichen verglichen, .... DA SHRINK-1 DEY
DA WIDE-1 STY 02
CMP (TXTPNT),Y *
BEQ STARTLO2 *--—-——--- ------. -
|
*
Hier wird jedes Byte gespiegelt
und von rückwärts wieder ein-
wenn es nicht gleich ist, wird gesetzt.
das nächste mögliche Komman-
do verglichen.
l. Grafik-Routine: Invert
“*RrK KK
Diese Routine invertiert den
gewünschten Hires-Puffer.
MIRRLO2 LDY Q1l
LDA (COUNTl),Y
JSR ROTATE
PHA
LDY Q2
Der gewünschte Puffer- LDA (COUNTl),Y
ausschnitt wird hier bestimmt JSR ROTATE
LDY Ql
NVERT JSR TESTBUF STA (COUNTl),Y
Das Kommando wurde gefunden. JSR TESTPART PLA
Jetzt wird die Adresse aus JSR CALCEND LDY Q2
einer anderen Tabelle geholt, LDX PAR+2 STA (COUNTl),Y
um die Routine anzuspringen. * INC Qıl
* Jetzt wird die Adresse einer DEC Q2
GEFUNDEN LDA COMCOUNT * Bildschirmzeile bestimmt.
ASL * Zeile fertig?
TAX INVLOl JSR CALCCUR
LDA COTAB2+1,X LDA HBASL LDA Q1l
PHA STA COUNTI CMP_ Z2
LDA COTAB2,X LDA HBASH BNE MIRRLO2
PHA STA COUNTI+1
*
*
*
*
*
STARTLO3 INX *
LDA COTAB1l,X *
*
*
*
*
I
* ar
CMP #$8D
BNE STARTLO3
INC COMCOUNT
JMP STARTLOl
*
“
*
*
*
*
Ausschnitt fertig?
Jetzt wird nur noch das Y-Reg.
zum Textpointer addiert, damit
Applesoft später mit dem
nächsten Kommando fortfährt.
Die Bildschirmzeile (49 Bytes
lang) wird hier invertiert: INC Z1
LDA Z1
Bsp: #%1P@1@119 CMP PAR+4
EOR #%@1111111 BNE MIRRLOl
JSR ADDON = #7A11101091
RTS
“*AAKKKKKKKRK
Diese kleine Routine lädt das LDY PAR+1
X-Register mit dem Code für LDA (COUNT1),Y * 3. Grafik-Routine: Drehen
den Syntax-Error und springt in EOR #$7F *
die Applesoft-Fehlerroutine STA (COUNT1),Y * Diese Routine dreht den ge-
INY * wünschten Hires-Puffer.
LDX +#$1®
JMP ERROR Ende einer Zeile?
Diese Tabelle enthält die CPY PAR+3 * Hier wird wieder der Puffer und
Namen der Kommandos, die be- BNE INVLO2 * der Ausschnitt eingelesen.
liebig geändert werden können INX *
DREHEN JSR TESTBUF
ILFTABl HEX 8D Ende eines Ausschnitts? JSR TESTPART
ASC "VERFUEGBARE " JSR CALCEND
ASC "KOMMANDOS: '" CPX PAR+4
HEX 8D8D BNE INVLOl In Z1 steht die Anfangszeile,
COTABl ASC "TURN <BUF>' RTS
ASC "',„<PART>' LDA PAR+2
HEX 8D STA Z1
ASC "REFLECT <BUF>'
ASC ",<PART>' 2. Grafik-Routine: Spiegel
HEX 8D
ASC "INVERT <BUF>' Diese Routine spiegelt den
ASC "',<PART>' gewünschten Hires-Puffer.
HEX 8D STX Z2
ASC "SWAP ' — CLC
'<BUF>, <BUF>' LDA
HEX 8D JSR TESTBUF ADC
'COPY ' JSR TESTPART ROR
'<BUF>, <BUF>' JSR CALCEND STA
8D
in Z2 die Endzeile
LDX PAR+4
DEX
Eu Ze Ze u Ze
|
|
|
|
|
|
|
*
S2 Peeker 1/86
389
381
393
394
395
396
335 %* Zeilen durchgezählt.
3356 %*
3357 TURNLOl LDX Z1
338 JSR CALCCUR
339 LDA HBASL
340 STA COUNTI
341 LDA HBASH
342 STA COUNTI+1
343 LDX Z2
544 JSR CALCCUR
345 LDA HBASL
346 STA COUNT2
347 LDA HBASH
348 STA COUNT2+1
349 x*
350 * Ql ist der Zähler für die mo-
351 %* mentane Byte-Position in einer
352 x* Zeile; Q2 ist das letzte Byte.
355 %*
354 LDY PAR+1
355 STY Q1
356 LDY PAR+3
357 DEY
358 STY 02
359 %*
360 & In dieser Schleife wird jede
361 %* Zeile durchgezählt und gedreht
362 %*
363 TURNLO2 LDY Ql
364 LDA (COUNT1l),Y
365 JSR ROTATE
366 PHA
367 LDY Q2
368 LDA (COUNT2),Y
369 JSR ROTATE
37 LDY Ql
371 STA (COUNT1l),Y
372 PLA
373 LDY Q2
374 STA (COUNT2),Y
375 INC Q1
376 DEC Q2
Ende einer
LDA
CMP
BNE
INC
DEC
LDA
399 CMP PAR+4
391 BNE TURNLOl
392 RTS
*
K---
*
* Vorentscheidung: kopieren, *
* verschmelzen oder tauschen *
TAUSCH
* In dieser Schleife werden die
Zeile?
Bildschirm(-ausschnitt) fertig?
Ql
PAR+3
TURNLO2
z1
22
Z1
*
402 BNE SETFLAG
403 MISCHEN LDA #2
404 BNE SETFLAG
405 KOPIEREN LDA #®
ADd6 x*
407 x In BYT1 wird festgelegt ob
408 %* — Tausch, dann ];
409 x& — Mischen, dann 2;
41® %* - Kopieren, dann ß.
all x
412 SETFLAG STA BYTl
413 JMP COPY
414 x
4l5 _%*--------------- *
416 x*
417 x 4. Grafik-Routine: bewegt,
418 x vertauscht oder verschmelzt
419 & die beiden Grafik-Seiten.
4220 x
xrr%r* x
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*
*
* Zuerst wird der Herkunft-Screen
* bestimmt und in Ql abgelegt,
* dann der Bestimmung-Screen, der
Peeker 1/86
* in Q2 abgelegt wird.
*
C
C
C
C
*
*
*
*
*
C
*
OPT JSR
CPX
BEQ
CPX
BEQ
LDX
JMP
LDA
STA
BNE
LDA
STA
JSR
CPX
BEQ
CPX
BEQ
LDX
JMP
LDA
STA
BNE
OP5 LDA
STA
OP6 LDX
STX
OPYl LDX
GETBYTE
#]
coPl
#2
coP2
+$35
ERROR
+$29
Ql
COP3
+$49
ql
COMBYTE
#1
COPA
#2
COP5
+$35
ERROR
+$29
Q2
COP6
Jetzt werden wieder die Basis-
adressen der Herkunfts- und Be-
stimmungszeile festgelegt.
LDA
STA
JSR
LDA
STA
LDA
STA
LDX
LDA
STA
JSR
LDA
STA
LDA
STA
Ql
PAGE
CALCCUR
HBASL
COUNT1
HBASH
COUNTI+1
zl
Q2
PAGE
CALCCUR
HBASL
COUNTZ2
HBASH
COUNT2+1
Hier wird wieder jede Zeile
entweder kopiert, vertauscht
oder gemischt und im Zielpuffer
abgelegt.
LDY
OPY2 LDX
LDA
CPX
BEQ
CPX
BEQ
EOR
SEC
BCS
PHA
LDA
STA
PLA
STA
INY
CPY
BNE
INC
LDA
CMP
BNE
RTS
+9
BYT1
(COUNT1),Y
7")
MOVE
#1
SWAP
(COUNT2),Y
MOVE
(COUNT2) ,Y
(COUNT1),Y
(COUNT2) ,Y
+40
COPY2
Z1
Zz1l
#192
coPYl
%-————
Unterroutine: Berechnung *
der neuen Cursor-Position
Diese Routine benutzt die Mo-
nitor-HPOSN-Routine, die die
Adresse einer Zeile berechnet
die sich im A-Reg. befindet.
ALCCUR TAXA
* %*
5. Grafik-Routine: schaltet *
auf Hires-Seite <l> o. <2>. *
“RK
HGR oder HGR2?
ZEIGEN JSR TESTBUF
LDA PAGE
CMP #$49
BEQ SEITE2
Ab hier werden nur noch die
Softswitches betätigt:
*
5
%*
*
* -— $c059 für Graphik
* -— $Cc052 für volle Graphik
* — $C057 für Hires-Graphik
* — $0054 für 1. Seite
* — $0055 für 2. Seite
*
S
EITEl BIT $c0954
JMP SWITCH
SEITE2 BIT $c0955
SWITCH BIT $cß5®
BIT $c857
BIT $c®52
RTS
*
TEE 7
*
* Unterroutine: spiegelt
* ein Byte
* Hier wird ein einzelnes Byte
* gespiegelt z.B. #$91 zu #$49
*
ROTATE LDX #9
ASL
BCC NOCARRY
LSR
ROL
ROR
DEX
BNE
LDA
ORA
RTS
*
NOCARRY LSR
NCRLO ROL
ROR
DEX
BNE
LDA
AND
Unterroutine: testet, welcher x
Puffer verlangt wurde (1/2). x
“*RRrK KR
“**xr +
TESTBUF JSR
CPX
BEQ
CPX
BEQ
LDX
JMP
LDA
STA
RTS
LDA
STA
+
Hier wird nur der Puffer von
dem Kommando eingelesen.
GETBYTE
#]
BUFL1
+2
BUF2
+$35
ERROR
+$20
PAGE
+$49
PAGE
33
6. Routine: Hilfe — gibt die
möglichen Kommandos aus.
Diese Routine benutzt die
normale Kommandotabelle, so
daß jede Änderung eines Kom-
mandonamens richtig angezeigt
wird (z.B. TURN -> DREHEN)
ILFE LDA #<HILFTABl
STA COUNT
LDA #>HILFTABl
STA COUNTI+1
LDY #9
HILFLOl LDA (COUNTl),Y
CMP_ #$FF
BEQ HILFEX1
ORA +#$89
INY
JSR COUT
BNE HILFLOl
%*
HILFEXl RTS
%*
Km
Unterroutine: verschmelzt
zwei Bytes zu einen!
Hier wird nur jedes zweite Bit
eines Bytes erfaßt, so daß
man zwei in einem zusammenfas-
sen kann.
SHMER LDX
SHMERLO ROL
ROL
ROL
DEX
BNE SHMERLO
* Unterroutine: Diese Routine *
* testet, welcher Teil eines *
Puffers verlangt wird.
* Das ist recht einfach, da nur
* die passenden X- und Y-Werte
* gesetzt werden müssen.
*
TESTPART JSR COMBYTE
STX PAR
cCPX #4
BEQ VIER
CPX #3
BEQ DREI
CPX #2
BEQ ZWEI
cPX #1
BEQ EINS
CPX #9
BEQ NULL
LDX +#$35
JMP ERROR
NOP
LDA #99
STA PAR+Ll
LDA #99
STA PAR+2
BEQ TPEX
LDA #29
STA PARH+l
LDA #9
STA PAR+2
BEQ TPEX
LDA #99
STA PARH+l
LDA #96
STA PAR+2
BNE TPEX
34
EEE
ler!
"u
2]
Ss
„RK KK KH
1/4-Puffer
“*R KK
un
ri
Pr,"
HH
zZ
I
JSR
JSR
LDX
STX
LDX
STX
LDA
EOR
STA
*
* Wieder die
7. Grafik-Routine: Shrink
Diese Routine verkleinert
einen ganzen Bildschirm zu
einem Viertel-Bildschirm.
|
|
*
Pe
Es wird wieder der Herkunfts-
puffer sowie der Bestimmungs-
festgestellt.
TESTBUF
TESTPART
+9
zl
PAR+2
z2
PAGE
+$69
PAGE
Feststellung der
* Anfangsadresse
*
SHRINK1 LDA
EOR
STA
LDX
JSR
LDA
STA
LDA
STA
LDA
EOR
STA
*
PAGE
+$69
PAGE
21
CALCCUR
HBASL
COUNT
HBASH
COUNTI+1
PAGE
+$69
PAGE
* sowie der Bestimmungsadresse
*
LDX
JSR
LDA
STA
LDA
STA
LDY
STY
LDY
STY
z2
CALCCUR
HBASL
COUNT2
HBASH
COUNT2+1
+00
Ql
PAR+1
Q2
In dieser Schleife wird jedes
Byte zusammen mit einem anderen
zu einem zusammengepreßt, und
dann in den Zielpuffer
übertragen.
HRINK2 LDY
INY
LDA
JSR
DEY
LDA
ROL
JSR
LDY
LDA
STA
INC
INC
INC
Ende einer
LDA
CMP
BNE
INC
INC
INC
Ql
(COUNT1),Y
SHMER
(COUNT1),Y
SHMER
Q2
BYT1
(COUNT2),Y
Ql
Ql
Q2
Zeile?
Ql
+49
SHRINK2
Zzl
Z1
22
Ende des Screens?
LDA
CMP
Z1l
#192
BNE
* %*
Berechnet
1/4-Puffers
KRKKKKKKK KHK KR
CALCEND LDA
BEQ
CLC
LDA
ADC
STA
CLC
LDA
ADC
STA
RTS
LDA
STA
LDA
STA
* 7. Grafik-Routine: Hier wird
* 1/4-Puffer
* Screen vergrößert.
*
% nn.
*
* TESTBUF und
SHRINK1
Unterroutine: Calcend
das Ende eines
Viertel-Screens.
In dieser Unterroutine werden
die X- und die Y-Koordinate
der rechten unteren Ecke eines
festgestellt.
PAR
GANZ
PAR+1
+29
PAR+3
PAR+2
+96
PAR+4
#40
PAR+3
#192
zu einem ganzen
„rar rt Kr
*
TESTPART stellen
* wieder den Herkunft-1l/4-Screen
* und den Bestimmung-Screen fest.
*
WIDE JSR
JSR
*
TESTBUF
TESTPART
* Wieder Anfangszeile/Endzeile
*
LDX
STX
LDX
STX
LDX
STX
%*
* Hier werden
PAR+2
zı
+9
z2
+9
BYT3
wieder die Zeilen
* durchgezählt.
*
WIDELl LDX
JSR
LDA
STA
LDA
STA
LDA
EOR
STA
LDX
JSR
LDA
STA
LDA
STA
LDA
EOR
STA
LDY
STY
LDY
STY
21
CALCCUR
HBASL
COUNT
HBASH
COUNTI+1
PAGE
+$69
PAGE
z2
CALCCUR
HBASL
COUNT2
HBASH
COUNT2+1
PAGE
+$60
PAGE
PAR+1
ql
+9
Q2
In dieser Schleife wird jede
Zeile verdoppelt sowie jedes
Byte ebenfalls bitweise verdop-
pelt (z.B #$ß1 ->#$03)
IDE2 LDY
LDA
JSR
LDY
Ql
(COUNT1),Y
WIDEIT
Q2
Peeker 1/86
*
INY
LDA
STA
DEY
LDA
STA
INC
INC
INC
BYTl
(COUNT2) ,Y
BYT2
(COUNT2) ,Y
Ql
Q2
Q2
* Ende der Zeile?
*
*
LDA
CMP
BNE
LDA
BEQ
INC
LDA
EOR
STA
INC
Q2
+40
WIDE2
BYT3
NOINC
Z1l
BYT3
#$01
BYT3
22
* Ende des Screens?
*
*
WIDEIT
*
WDITSUBl
WDITLO1
*
WDITSUB2
LDA
CMP
BNE
RTS
JSR
LDX
JSR
JSR
LDX
JSR
RTS
LDY
ASL
PHP
ROL
PLP
ROL
DEY
BNE
RTS
ASL
PHP
ROL
PLP
ROL
RTS
22
WDITSUB2
#9
WDITSUB1
WDITSUB2
#1
WDITSUB1
BYT1,X
BYT1,X
WDITLO1l
Der nächste
Peeker
Heft 2/1986
erscheint
am 20. 01. 1986
Peeker 1/86
AGE
(Objektcode)
BSAVE AGE,
$9199:
$9198:
$911ß:
$9118:
$9129:
$9128:
$9139:
$9138:
$9149:
$9148:
$9159:
$9158:
$9169:
$9168:
$9179:
$9178:
$9189:
$9188:
$9199:
$9198:
$91AP:
$9Y1A8:
$91B®:
$91B8:
$91Cp:
$I1c8:
$91DB:
$91D8:
$91EB:
$91ES:
$91FBß:
$Y1F8:
$9299:
$9298:
$9219:
$9218:
$9229:
$9228:
$9239:
$9238:
$9249:
$9248:
$9259:
$9258:
$9269:
$9268:
$9279:
$9278:
$9289:
$9288:
$9299:
$9298:
$92A9:
$92A8:
$92BB:
$92B8:
$92c9:
$92c8:
$92D9:
$92D8:
$92EB:
$92E8:
$92FB:
$92F8:
$9309:
59308:
$9319:
$9318:
$9329:
$9328:
$9339:
$9338:
A9
F6
93
94
FF
Fo
Fo
D®
"r)
DE
19
c6
AB
CF
4E
3C
45
42
52
52
2C
53
A$919ß,
ac
93
85
A2
E8
15
EF
F8
DA
92
ac
D5
CB
D3
29
59
46
55
54
54
3C
57
3E
43
46
8D
42
46
sc
52
46
3E
42
52
92
93
F3
AE
85
03
ce
03
39
86
03
93
FB
93
29
20
A4
A5
A5
29
94
03
6D
FE
A5
93
FD
93
29
20
A4
A5
FE
D®
92
2B
99
12
8D
85
74
FF
c8
c9
E8
E6
AA
48
12
C5
CF
BA
3C
4l
ac
46
3E
20
59
al
2C
4F
3E
4D
55
3E
42
49
3E
8D
55
54
IF
B9
93
#2
FA
Bl
#3
Dp
94
FE
4a
A5
AC
88
D6
D6
@1
9
FE
F3
F5
73
6B
Ag
BD
FF
BD
90
BD
20
DA
c7
CD
8D
42
52
45
3E
8D
3C
4l
59
3C
50
2C
45
L$P4BP
93
A9
D®
1%)
6D
Fo
6D
ac
OF
98
8D
62
CD
8D
55
54
43
Sc
49
A9
91
03
85
91
21
91
IF
92
D9
D6
cl
cı
54
46
3E
54
3C
4E
55
54
3C
55
20
42
47
2C
48
3E
29
59
44
a6
FF
93
94
94
AE
85
7F
FA
29
94
03
A6
FA
$9378:
$9389:
$9388:
$9399:
$9398:
$93AB:
$93A8:
$93B9:
$93B8:
$93C9:
$93C8:
$93DB:
$93D8:
$93EB:
$93E8:
$93Fß:
$93F8:
$9499:
$9408:
$9419:
$9418:
$9429:
$9428:
$9439:
$9438:
$9449:
$9448:
$9459:
$9458:
$9469:
$9468:
$9479:
$9478:
$9489:
59488:
$9499:
$9498:
$94AAB:
$94AAB8:
$94BB:
$94B8:
$9ACcp:
$94C8:
$94DP:
$94D8:
$94EB:
$94ES:
$9Y4AFB:
$94FB8:
$9599:
$9598:
$951®:
$9518:
$9529:
$9528:
$9539:
$9538:
$9549:
$9548:
$9559:
$9558:
$9569:
$9568:
$9579:
$9578:
$9589:
$9588:
$9599:
$9598:
$95AB:
$95A8:
$9349:
$9348:
$935ß:
$9358:
$9369:
$9368:
$9379:
35
1. Programmbeschreibung
Das Assemblerprogramm PROTODOS,
das unter DOS 3.3 gestartet wird, kopiert
Dateien von einer ProDOS-Diskette auf
eine DOS-3.3-Diskette. Es setzt 2 Lauf-
werke voraus, die an demselben Slot an-
geschlossen sein müssen, d.h. eine Kopie
von z.B. S4, D2 nach S6, D1 ist nicht
möglich.
Die zu übertragenden Dateien müssen
sich im Volume-Directory (= Hauptinhalts-
verzeichnis) der ProDOS-Diskette befin-
den. Diese Beschränkung erfolgt aus
Platzgründen: Eine Version, die zusätzlich
das Präfix setzt und auf Subdirectories
zugreift, wäre zu umfangreich für eine Ver-
öffentlichung im Peeker.
Das Gegenstück zu PROTODOS, nämlich
DOSTOPRO, steht in „Apple ProDOS für
Aufsteiger“, Bd. 2, S. 183ff. (Hüthig-
Verlag).
Die folgenden Dateitypen werden von
dem Programm unterstützt:
— Applesoft-Programme: ProDOS-
Dateityp BAS wird zum DOS-Dateityp A;
— Binärdateien: ProDOS-Dateityp BIN wird
zum DOS-Dateityp B, die Startadresse
bleibt unverändert;
— Systemdateien: ProDOS-Dateityp SYS
wird zum DOS-Dateityp B und erhält die
Startadresse $2000;
— Textdateien: ProDOS-Dateityp TXT wird
zum DOS-Dateityp T.
Sequentielle Textdateien werden (bis auf
das DOS-gerechte Setzen des höchst-
wertigen Bit 7) unverändert und in beliebi-
ger Länge übertragen.
Was Random-Textdateien betrifft, hat
PROTODOS eine Neuerung zu bieten:
Dieser Dateityp kann ebenfalls übertragen
werden, denn das Programm bricht nicht
beim ersten leeren Record ab. Statt des-
sen werden Random-Textdateien expan-
diert, d.h. unbelegte ProDOS-Records er-
scheinen auf der DOS-Diskette als leere
Sektoren.
2. Bedienungsanleitung
Die „Benutzeroberfläche“ von PROTO-
DOS orientiert sich sehr stark an dem
bereits im Peeker, Heft 3/85, erschiene-
nen Programm WS.TRANSFER von Dr.
Jürgen Kehrel. Die notwendigen Schritte:
— DOS 3.3 von Laufwerk 1 booten;
- PROTODOS mit BRUN PROTODOS
starten;
—- Die ProDOS-Diskette in Laufwerk 2 ein-
legen.
36
PROTODOS
Konvertierung
von ProDOS- in DOS-3.3-Dateien
Zunächst erhalten Sie einen CATALOG
des Volume-Directory der ProDOS-Dis-
kette. Übertragbare Dateien sind dabei be-
reits mit dem entsprechenden DOS-
Dateityp gekennzeichnet. Als nächstes
müssen Sie den Namen der zu übertra-
genden ProDOS-Datei sowie den Namen,
den diese Datei auf der DOS-Diskette ha-
ben soll, eingeben. Wenn Sie anstelle ei-
nes dieser beiden Namen nur ein <Re-
turn> eingeben, beginnt das Programm
von vorne.
Nach einer Überprüfung, ob nicht bereits
eine Datei mit dem angegebenen Namen
auf der DOS-Diskette existiert (und ggf.
entsprechender Rückfrage des Pro-
gramms beim Benutzer), beginnt der
Übertragungsvorgang. Wenn die Übertra-
gung fehlerfrei abgeschlossen wurde, er-
halten Sie danach einen CATALOG der
DOS-Diskette.
3. Grenzen des Programms
PROTODOS benutzt diejenige Slotnum-
mer, die beim Programmstart von DOS 3.3
gesetzt wird. Damit wird eine zusätzliche
Anfrage an den Benutzer umgangen. Der
Transfer zwischen zwei verschiedenen
Slots ist daduch allerdings nicht mehr
möglich.
Das Speichern eines Binärprogramms mit
einer Länge von mehr als $7FFF Bytes ist
unter DOS 3.3 ohne vorherigen DOS-
Patch nicht möglich und ergibt einen
RANGE ERROR. Erstaunlicherweise wer-
den aber von PROTODOS geschriebene
Binärdateien von DOS auch dann ohne
Probleme geladen, wenn sie länger als
$8000 Bytes sind.
Die Expansion einer Random-Textdatei
beansprucht u.U. viel Speicherplatz auf
von Arne Schäpers
der Diskette. Eine Datei mit einer Record-
länge von 100 Bytes und einem einzigen
tatsächlich belegten Record mit der Num-
mer 1300 füllt eine normale DOS-Diskette
(35 Spuren) vollständig.
Hier wäre ein Ansatzpunkt für eine Erwei-
terung des Programms: In dem sog. Auxi-
liary-Information-Feld (AUX_INFO) des
ProDOS-Dateieintrags findet sich bei einer
Random-Textdatei die Recordlänge, mit
der die entsprechende DOS-Datei über
den File-Manager eröffnet werden könnte.
Das Programm müßte beim Lesen der
ProDOS-Datei danach jeden einzelnen
Record prüfen und nicht-existente Re-
cords auf der DOS-Diskette mit Hilfe des
File-Manager-POSITION-Befehls über-
springen. Allerdings ergibt sich dabei eine
recht aufwendige Hin- und Herrechnerei
im Programm.
4. Programmtechnische Details
Die meisten Teile des Programms sollten
in ihrem Ablauf relativ einfach zu verfolgen
sein. Einige Stellen bedürfen allerdings
eingehenderer Erklärung bzw. sind „Kri-
tisch“:
Direkt-Modus: DOS prüft bei Befehlen
und Eingaben, ob ein Applesoft-Programm
läuft, und testet dazu die Zero-Page-
Adressen $0033 (Prompt) und $0076
(CURLIN = momentane Applesoft-Pro-
grammzeilennummer). Falls diese Spei-
cherstellen dieselben Werte wie im Direkt-
Modus enthalten (Prompt = „U“ und
CURLIN = $FF), behandelt DOS jede Ein-
gabe wie einen direkten Befehl und würde
z.B. auf eine Dateinamen-Eingabe CATA-
LOG mit einem CATALOG reagieren. Das
Peeker 1/86
a ————————————————————————————————————————————————— EEE
Setzen dieser beiden Speicherstellen ist
ein eleganterer Weg als das „Abhängen“
von DOS.
Volume-Directory: Nach der Meldung
von RESTART wird das gesamte Volume-
Directory (4 Blocks = $800 Bytes) von der
ProDOS-Diskette eingelesen (Routine
RDDIR) und danach über PRTDIR ausge-
geben. Das Absuchen dieser vier Blocks
nach (belegten) Einträgen (GET1ST und
GETNXT) ist aus dem ProDOS-Urlader
übernommen und ziemlich fehleranfällig.
Jeder Eintrag hat eine Länge von $27
Bytes, wobei der erste Eintrag beim 4.
Byte ($004) des jeweiligen Blocks beginnt.
Daraus folgt: Der letzte Eintrag innerhalb
eines Directory-Blocks beginnt mit dem
Byte $1D8 und endet mit dem Byte $1FE -—
bei einer weiteren Erhöhung um $27 für
den nächsten Eintrag verrechnet sich die
Suchroutine, denn es kommt $1FF heraus.
Hier steht in einem ProDOS-Directory-
block immer der Wert $00, und die Such-
routine „erkennt“ daraus „gelöschter Ein-
trag“ und nimmt eine erneute Erhöhung
des Pointers vor mit dem Ergebnis $026
im nächsten Block, in dem die Einträge
aber wieder mit dem 4. Byte beginnen.
PROTODOS
BSAVE PROTODOS, A$P803, L1584
*
- * PROTODOS *
*
%*
ProDOS -> DOS 3.3
*
* Arne Schäpers 19/85
co o_ı9 om Audre
u
MSGPNT
PTR
IOBPNT
TEMP
*
WNDLFT
CH
cV
PREG
*
IN
*
STYP
EOF
NAMBUF
TWORK
*
* PAGE-3-VEKTOREN:
*
DOSCOLD EQU
FMAN EQU
RWTS EQU
FMANLOC EQU
RWTSLOC EQU
*
EQU 9
EQU $95
EQU $97
EQU $99
EQU
EQU
EQU
EQU
$20
$24
$25
$48
VD Hrr Hr
SO ID AU DH US
EQU $299
EG)
DH
EQU $399
EQU
EQU
EQU
$339
$369
$3D3
$3D6
$3D9
$3DC
$3E3
STYP+$15
KRERKKHKTKTERTKT TI E K
*
*
*
*
*
*
KRRRKKKKRTTKTT II HK ER
Aus diesem Grund muß jeweils am Ende
eines Blocks, also nach $200 Bytes ‚„von
Hand“ nachkorrigiert werden. Der Test auf
„innerhalb Block“ oder „nächster Block
und Korrektur“ ist dabei von der Adresse
abhängig, ab der das Directory geladen
wurde.
Index-Blocks: Über das Thema „Lesen
einer ProDOS-Datei“ im Zusammenhang
mit Master-, Index- und Datenblocks |lie-
Ben sich ganze Bücher schreiben. Hier sei
nur angemerkt, daß ein Masterblock die
Blocknummern von Indexblocks enthält,
die ihrerseits wiederum die Blocknum-
mern der einzelnen Datenblocks einer
Datei enthalten. Je nach Dateigröße be-
steht eine ProDOS-Datei nur aus einem
einzigen Datenblock (max. 512 Bytes), ei-
nem Indexblock mit max. 256 Datenblocks
(max. 256 * 512 Byte) oder einem Ma-
sterblock, der max. 128 Indexblocknum-
mern enthält. Die Blocknummer im Datei-
eintrag zeigt immer auf den „höchstwerti-
gen“ Block der Datei, d.h. bei kleinen
Dateien direkt auf den einzigen
Datenblock, ansonsten auf den Index-
bzw. Masterblock.
PTR für PRINT
diverse Zwecke
PTR auf IOB-Liste
Scratch
Textfenster links
Curs. horizontal
Curs. vertikal
Bug-Fix (RWTS)
Eingabe-Puffer
ProDOS-Dateieintrag
(3 Byte)
DOS-Filename
FMan-Workspace
Kaltstart DOS
FMan-Aufruf
RWTS-Aufruf
Adresse bestimmen
Adresse bestimmen
* DATEN/FILE-MANAGER-PUFFER:
*
TTSLIST EQU $oF@®
TDBUF EQU $190®
DIRBUF EQU $11®®
Peeker 1/86
TS-Puffer (FMan)
Sec-Puffer (FMan)
ProDOS-Directory
D
*
KBD
K
*
*
”
TEXT
HOME
RDKEY
GETLN
C
PRBYTE
COUT
*
*
PROdos 94
Skewing: In der Routine RDBLOCK wird
zuerst aus der Blocknummer die Track-
und Sektornummer ermittelt. Dabei kommt
jedoch bereits die physikalische Sektor-
nummer heraus. Da die RWTS von DOS
intern eine Umsetzung von logischer nach
physikalischer Sektornummer vornimmt
(„Sektor Skewing“), muß diese Umset-
zung vorher rückwärts vorgenommen wer-
den, nämlich so, daß die RWTS nach der
internen Umrechnung dann wieder den
tatsächlich gewünschten Sektor liest.
Kurzhinweise
1. Zweck:
Konvertierung von ProDOS- in DOS-3.3-
Dateien
2. Konfiguration:
Apple II+/e/c; DOS 3.3
3. Test:
BRUN PROTODOS
(von DOS-3.3-Diskette aus!)
4. Sammeldisk:
T.PROTODOS
(Big-Mac-Quelltext)
PROTODOS 4
(Maschinenprogramm)
TABUF EQU $15®® Datenpuffer-Start
Tastatur
Taste löschen
EQU $coBp
BSTRB EQU $cd1d
MONITOR-AUFRUFE:
$FB2F
$FC58
$FDÖC
$FD6A
$FDSE
$FDDA
$FDED
EQU 24 * 40 Z
EQU
EQU
EQU
EQU
EQU
EQU
1 Tast.-Zeichen
l Tast.-Zeile
<CR>-Ausgabe
Byte ausgeben
Zeichenausgabe
ROUT
ORG $9893
LDA
STA
STA
JSR
LDA
JSR
JSR
LDA
STA
LDA
STA
JSR
HEX
ASC
+$AQ
$33
$76
TEXT
+$95
COUT
HOME
+19
CV
+$06
WNDLFT
PRINT
8D
"PRODOS -> DOS-KONVERTER"
PROMPT und
CURLIN =>
"AP läuft"
CHR$ (21)
=> 80-Z aus
VTAB #9
"HTAB 5"
BE A® C4A
CE D6 C5
8D8D
"_ ARNE SCHÄPERS 19/85"
C3 C8 DB
Bl B®ß AF
8D8D8Ddd
WNDLFT zurück
#309
WNDLFT
37
0856:
0859:
B85B:
085D:
869:
Ö861:
0863:
0865:
B866:
0868:
DB6A:
BBCC:
BS6GE:
0879:
0873:
0876:
0879:
B8TB:
B87D:
B889:
881:
0884:
B88C:
B88D:
DSF:
0892:
BEA:
BBA2:
DBAA:
B8BP:
B8B2:
B8B5:
B8BD:
B8C5:
BSCD:
B8D1:
Q8D3:
B8D6:
ÖSDE:
ÖSEBS:
ÖSEE:
Q8F5:
B8FT:
ÖSFA:
ÖSFC:
ÖSFF:
0991:
0993:
0995:
0997:
DIBA:
Ö9pD:
B91B:
B912:
0915:
0917:
D91A:
ß91D:
Ö91E:
0921:
0929:
B92F:
0930:
0933:
0934:
0936:
0938:
B93B:
B93E:
B949:
0943:
0945:
D948:
DIAA:
BYAD:
0955:
B95D:
0965:
B96B:
38
20 2B BE 77
AB BC
Bl 97
99 78
88
D®
A5
38
E9
E9
29
19
A9
F8
#8
8D
29
20 58
85
29
8D
cc
c5
AE
8D
c4
25
24
C5
CE
8D
c9
Ad
c4
Ad
D7
8D
c5
D®
c9
c9
C5
8D
c9
C5
D3
CE
D2
8D
BC
A®
CB
A®
CB
8D
D2
58
E4
05
32
03
9D
24
D2
CF
6A
70
9F
C6
AT
F6
24
87
cl
D3
D4
c9
D5
8D
C3
C5
03
1)
OD
DA
DA
FC
dB
c7
Ad
c5
D2
D3
CE
D2
CE
c4
c5
cc
AB
c5
D2
c9
AD
Aß
cp
co
03
FC
pc
dc
09
QB
CF
D3
ei
FD
dc
dc
dc
dB
cc
c8
c9g
c8
c4
78
79
80
81
82
83
84
85
86
87
88
89
99
91
92
93
94
95
96
97
98
99
109
101
192
193
D3 C9
104
195
CF C4
CB C5
AB CC
CB A®
196
197
CF D3
DA DA
c1 D5
Bl
198
199
CE BE
DA C5
BC C5
Cc5 CE
119
111
112
113
114
115
116
117
118
119
129
121
122
123
124
125
126
127
128
129
AD CA
CD C5
130
131
132
133
134
135
136
137
138
139
149
141
142
c5 D2
D4 D9
DA A®
C5 CE
1435
SETIOB
*
SETFRE
*
JSR
LDY
LDA
STA
DEY
BNE
LDA
SEC
SBC
SBC
AND
BPL
LDA
STA
JSR
GETIOB
#$0C
(IOBPNT),Y
IOB,Y
SETIOB
IOBPNT+1
+$21
#<DTABUF
+$FE
SETFRE
+$89
FRESPC
CRCONT
IOB-Adresse
RWTS-Parms
kopieren
wg. Slotnummer
Bestimmung des
freien Platzes
-> norm. = $96(PP)
Daten-Start
-> Geradzahl
wenn < $80@0 Byte
Datenpuffergröße
"RETURN -> Weiter"
KERRRRERRRRRRTRTTT TR
* RESTART NACH TRANSFER x
KRERKKRERKTTTTTTT EI
*
RESTART
C5 AE AE
CF
D4
cl
B2
D3
D4
D5
AD
C5
C6
AD
C5
C6
c4
Ad
D7
c9
c9
c5
Ad
D2
D3
c4
BD
Ad
c3
c5
A®
Ad
BE
GETCR1
*
NEWDSK
ERRVEC
*
GETPN
C1 D4 C5
BA
SCANDIR
AD CA Cl
D® AF CE
07 C5 C6
Al
JSR
LDA
STA
JSR
HEX
ASC
HEX
ASC
HEX
ASC
HEX
ASC
HEX
LDA
BPL
STA
CMP
BEQ
CMP
BNE
JMP
JSR
JSR
BCS
JSR
BCC
JMP
JSR
HEX
ASC
HEX
JSR
TXA
BEQ
STA
JSR
JSR
BEQ
JSR
BNE
JSR
HEX
ASC
HEX
HOME
VTAB 11
"LEGEN SIE..."
8D8D
"DIE PRODOS-DISKETTE
IN LAUFWERK 2"
8D8D
"EINE DOS-DISKETTE
IN LAUFWERK 1"
8D8D
"<RETURN>
= ENDE"
8DPP
KBD
GETCRl
KBSTRB
+$8D
NEWDSK
#+$9B
GETCRl
DOSCOLD
HOME
RDDIR
ERRVEC
PRTDIR
GETPN
ERROR
PRINT
8D
= WEITER
<ESC>
das hier ist
der einzige
reguläre Ausgang
<ESC>?
liest ProDOS-DIR
=> Lesefehler
druckt CATALOG
DIR nicht leer
"PRODOS-DATEINAME: '"
09
GETLN
RSTVEC
TEMP
GET1ST
CMPNAME
GOTPN
GETNXT
SCANDIR
PRINT
8D87
Eingabe Dateiname
Eingabe-Länge
=> nur <CR>
Namenslänge
Vergleich mit
ProDOS-Einträgen
nächster Eintrag
Loop bis DIR-Ende
BELL
"FALSCHER DATEITYP/
NICHT GEFUNDEN!"
8DPP
Q96D:
0979:
0973:
0975:
0978:
0979:
BI7TB:
BITE:
B9TF:
0982:
DIA:
B98D:
B98E:
0991:
0992:
0994:
0997:
0999:
BB:
B99D:
D9AB:
BYA3:
B9AB:
B9A9:
BYAC:
DYAF:
B9BB:
B9B3:
QÖ9BB:
B9C1:
094:
BSCC:
B9DA:
Ö9D6:
B9D7:
D9DA:
BSDC:
Ö9DE:
ÖIEB:
B9E3:
BIES:
DIES:
DIEB:
Ö9ED:
B9FB:
B9F3:
BÖYF6:
B9F8:
B9FB:
ÖYFE:
DABl:
DADA:
DABT:
DAQg:
DABC:
DADE:
DAI1®:
DAl2:
BAl5:
DAI1B:
DAIB:
QBAID:
QAIF:
BA21:
DA2A:
DA2T:
DAZA:
DA2D:
DARF:
DA3B:
DA32:
DA33:
BASE:
DA38:
DASB:
QA3D:
DAAD:
DAA3:
DAB:
DAA9:
20
011)
11)
W10)
29
Fo
29
BP
EE
EE
EE
EE
20
1A
23
05
11)
F8
24
CF
c4
C5
6A
12
44
d6
5B
24
8D
AE
76
96
24
DB
99
11
B3
OB
D3
cl
BA
FD
dB
OB
"")
08
DB
dB
DA
Ad
D2
c5
c3
Ad
FD
FD
FD
#9
FD
FD
dB
03
dB
dB
dB
dB
dB
03
03
03
dB
03
03
dB
DA
OD
DA
DA
DA
DA
DA
144
145
146
147
148
149
159
151
152
153
DA C5
154
155
156
157
158
159
169
161
162
163
164
165
166
167
168
169
179
ı71
c5 D8
D4 AE
172
c8 D2
AB CA
173
174
175
176
177
178
179
18®
181
182
183
184
185
186
187
188
189
199
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
2908
209
219
21l
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
JMP GETPN => neue Eingabe
GOTPN LDY DIRBUF+$23 Eintragslänge
GOTP1 LDA (PTR),Y Kopie des
SITA STYP,Y gefundenen Eintrags
DEY aus dem ProDOS-
BPL GOTPl1 Directory
*
GETDN JSR PRINT
HEX 8D
ASC "DOS-DATEINAME: "
Cc9 CE Cl
HEX 99
JSR GETLN
TXA Eingabe-Länge
BEQ RSTVEC nur <CR>
JSR OPEN OPEN DOS-Datei
BCC GETOV => existiert bereits
CMP +#$@6 FILE NOT FOUND?
BEQ MAKEFL wenn ja: o.k.
.
ERROR JSR PRINT
HEX 8D8DP®
JSR CRCONT "RETURN = Weiter"
RSTVEC JMP RESTART
*
GETOV JSR CLOSE kein Disk I/O
JSR PRINT
HEX 8D
ASC "DATEI EXISTIERT. "
C9 D3 D4
Ad
ASC "ÜBERSCHREIBEN (J/N): "
c5 C9 C2
AF CE A9
HEX 09
GTOl JSR RDKEY "3" oder "I"
AND #$DF => Großbuchstabe
CMP _ #'"N"
BNE GTO2
JSR COUT "N" ausgeben
JSR CROUT + <CR>
JMP GETDN -> neuer DOS-Name
GTO2 CMP 4 #"J"
BNE GTOl
JSR COUT "J" ausgeben
JSR CROUT + <CR>
JSR DELETE Datei löschen
BCS ERROR
”
MAKEFL LDA STYP+$19 ProDOS-Filetyp
JSR GETTP2 => DOS-Filetyp
LDA DTYPES,Y
STA DOSTYP
JSR CREATE erzeugt Datei
BCS ERROR
LDA DOSTYP
BEQ MOVE -> TEXT
CMP_ #$02
BEQ WRLEN A: nur Länge
LDX STYP+$1F BIN/SYS: Start-
LDY STYP+$29 adresse
LDA STYP+$1® ProDOS-Filetyp
BPL WRSTART -> ist BIN-Datei
LDX #$09 SYS-Datei: Start
LDY +#$29 auf $2099
WRSTART JSR WRI16 schreibt Startad.
WRLEN LDX EOF
LDY EOF+Ll Dateilänge
JSR WRI16 schreibt Länge
BCC MOVE "always"
*
a ee
* MOVER LOOP x
a ee
.
DADDR DFB #<DTABUF Datenstart
RDCOUNT DA vpP® gelesene Bytes
FRESPC DFB ® Datenpuffergröße
*
*
MOVE JSR SETRD setzt DSTART+TSTEOF
BEQ RDDONE -> EOF BB 00 BB
JSR RDIST liest 1.Block
BCS RDDONZ Disk-Fehler
RWLOOP INC DADDR Zieladresse + $299
INC DADDR
INC RDCOUNT+1 Anzahl gelesene
INC RDCOUNT+1 Bytes +$209
JSR TSTEOF EOF überschritten?
Peeker 1/86
BAAC:
BAAE:
BA51:
DAS5A:
BASE:
BAS59:
BASB:
PASD:
DA6P:
DA63:
DAGE:
BA69:
BAEC:
DAGF:
BA72:
DAT5:
DATB:
BA79:
BATB:
DATC:
DATF:
BABl:
DAB2:
BAB5:
BABT:
DABA:
BASC:
DABF:
BA91:
DA9YA:
BASE:
BA99:
QAAG:
DAA2:
BAA5S:
BAAB:
BAAB:
DAAE:
QABl:
QABA:
DABE:
DABBS:
QABB:
QABE:
BACE:
BACC:
BACD:
QADB:
BAD2:
QADS:
QADT:
BAD:
QADA:
BADC:
QDADF:
BAER:
DAEA:
BAET:
BAER:
AED:
DAF®:
BAFl:
DAFA:
DAFS5:
DAFB:
BAFY:
DAFC:
DAFF:
BBBB:
BBP3:
BBB5:
BBde:
BBß8:
DBBA:
BBOC:
ÖBOF:
ÖBll:
BBl2:
BBl4A:
99
AD
CD
BO
20
99
BO
AD
8D
AD
8D
20
8E
sc
8D
AD
38
E9
AA
AD
E9
A8
20
B®
20
D®
29
B®
29
8D
c3
ei
8D
ac
20
20
ac
29
8D
Ag
85
20
BC
DA
D7
a0
AD
19
8D
c9
DP
69
Ag
8D
8D
A9
8D
AD
dD
AD
69
AD
38
ED
AA
AD
ED
A8
AD
E9
69
Ad
Bl
Ad
D9
F®
88
D®
69
Peeker 1/86
ÖF
31
52
13
26
E2
48
15
39
16
31
Fl
15
16
17
30
91
31
DD
lE
DA
CA
96
17
24
84
c1
cc
7)
A8
96
AE
76
24
8D
99
24
24
D2
D5
C5
v1)
FB
19
8D
FA
JV)
39
31
15
2F
15
16
17
15
3ß
16
Sl
17
n®
1®
95
94
15
03
F8
DA
DA
dD
03
DA
93
DA
DA
93
93
DA
DA
dB
DA
BB
dB
DA
CF
DA
OB
DA
98
dB
u)
DB
C5
D2
c9
c9
c9
DA
DA
DA
93
03
03
3
DA
B3
DA
03
dB
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
259
251
252
253
254
255
256
257
258
259
269
261
262
Cc7 AC
263
264
265
266
267
268
269
278
271
272
273
274
275
276
277
278
CE BE
DA C5
279
280
281
282
283
284
285
286
287
288
289
29
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
31®
311
312
313
314
315
NXTRD
LIMIT
*
REWRITE
RDDONE
CA Bl
RDDONZ
RDQUIT
*
BCC
LDA
CMP
BCS
JSR
BCC
BCS
LDA
STA
LDA
STA
JSR
STX
STY
STA
LDA
SEC
SBC
TAX
LDA
SBC
TAY
JSR
BCS
JSR
BNE
JSR
BCS
JSR
HEX
ASC
HEX
JMP
JSR
JSR
JMP
LIMIT
RDCOUNT+1
FRESPC
REWRITE
RDNEXT
RWLOOP
RDDONZ
EOF
RDCOUNT
EOF+1
RDCOUNT+1
TSTEOF
EOF
EOF+1
EOF+2
RDCOUNT
#+$01
RDCOUNT+1
#509
WRITE
RDDONZ
SETRD
NXTRD
CLOSE
RDQUIT
PRINT
8D84
-> ja
max. $8000 I
Puffergröße
-> Puffer voll
nächster Block
EOF überschritten.
Begrenzung auf
den EOF für WRITE
EOF — RDCOUNT
= verbleibende
Anzahl von zu
lesenden Bytes
FMan-Angabe ist
l weniger als
die tatsächliche
Anzahl der zu
schreibenden Bytes!
schreibt X-Y Byte
-> FMan-Fehler
RDCOUNT auf ®
falls EOF noch > ®
vor(!) CATALOG
bei Fehler
<CR>, Control-D
"CATALOG,DI1"
8DPB
RDQUIT
CLOSE
CRCONT
RESTART
kein 2. CLOSE
"RETURN = Weiter"
das war's
KEKREKEKEKKKKHHKHKKTK THE EEK EHE KH
*
Unterprogramme
*
FRKKKERKEKEHKFRKFK TFT KH FE HE KH ER
”
CRCONT
Aß BD A®
D2
GETCR2
SETRD
*
TSTEOF
*
GETTYP
GETTP2
GTT1
GOTTYP
JSR
HEX
LDA
STA
JSR
ASC
HEX
LDA
BPL
STA
CMP
BNE
RTS
LDA
STA
STA
LDA
STA
LDA
ORA
ORA
RTS
LDA
SEC
SBC
TAX
LDA
SBC
TAr
LDA
SBC
RTS
LDY
LDA
LDY
CMP
BEQ
DEY
BNE
RTS
PRINT
8D8SDYP
+09
CH
PRINT
""<RETURN>
BB
KBD
GETCR2
KBSTRB
+$8D
GETCR2
+09
RDCOUNT
RDCOUNT+1
#>DTABUF
DADDR
EOF
EOF+l
EOF+2
EOF
RDCOUNT
EOF+1
RDCOUNT+1
EOF+2
+00
+$19
(PTR) ,Y
+$94
PTYPES,Y
GOTTYP
GTzı
HTAB ®8
WEITER"
wartet auf
ein RETURN
setzt RDCOUNT
zurück, Adresse
für den nächsten
Datenblock
und Test auf
EOF = dB GB BB
Test, ob RD-
COUNT > restliche
Bytes im File
High-Byte
Filetyp aus
DIR-Eintrag.
Heraussuchen
der unterstützten
ProDOS-Filetypen.
DOS-Filetyp
zuordnen
Jetzt purzeln die Preise!
ZUSATZ-KARTEN:
V-24-Schnittstelle ............ 199,- Z-80-Karte ................. 98,-
80-Zeichen-Karte m.Softswitch 236,- 16K-Language-Karte ......... 98,-
JoyStickDeluxe ............ 59,- Accelerator3,6 MHz ......... 950,-
68000 Intemex ............ 1600,- PALKarte ..........2........ N0,-
RGBKarte ................. 239,- IEEEABB......... 222222... 312,-
Koppler dataphon m. FTZ..... 325,- Z80BKarte mit Software ...... 919,-
Centronics-Karte von Epson für Graphik... . 210,- für Text... .145,-
a für 2 Drucker gleichzeitig. FREE 129,-
uper-Eprommer
Su keinen ep incl. Software für 2716-27128
-Controller
Bausatz wie links
FDC 4 für alle Laufwerke PP . 169,-
Leerplatine wie oben incl. Prom u. Eprom
Erphi-Controller
Drucker-S Spooler 64. kB,
fertig aufgebaut incl. Netzteil u. Gehäuse
Preh Commander Keyboards
Wir bieten Ihnen die Preh-Qualität auch für Apple. AK 88 Spez. mit Gehäuse, An-
schlußkabel, Zehner-Tastenfeld, dt. Zeichensatz, ee für
Ctrl-Codes und Rechenfunktionen
Preh Commander Keyboard, frei programmierbar
bis zu 10 Ebenen, pro Taste bis zu250 Zeichen .............. nur 599, =
TEAC 3%" Laufwerk FD er
Speicherkapazität 1 MB, (formatiert 640 KB) jetzt für nur
Ke
3 7
TEACFD55 AV 1x40 Track .... 395,- TEACFD55 BV2. x 40 Track 2... 460,-
TEAC FD 55 EV 1 x 80 Track . 445,- TEACFD5S5FV2x80 Track .... 449,-
Apple®-kompatibles Laufwerk incl. Gehäuse + Kabel ................ 599,-
320 KB Laufwerk für lic :
640 KB Laufwerk für IIc................ 1088,-
EPSON DRUCKER
EPSON FX80................ 1670,- EPSON FX 100
EPSONRX80 ....-..-......- 1079,- EPSON RX 80 FT
Die Microfloppy mit Zukunft:
Speicherkapazität: 2 x 1 MByte formatiert: 2 x
640 kByte. Anschlußfertig mit PROM-residenter
Patchsoftware für CP/M 2.2, Apple DOS 3.3, Di-
versiDOS 2-C, 4-C (DD MOVER), Apple Pascal
1.1, Pascal 1.2, Pro-DOS 1.0.1,
1.1, 1.1.1 zum Preis von
Low Power Version
10 MB Winchester
mit Software für DOS 3.3, CP/M 2.20, Pascal, Pro-DOS, 3990
incl. Controler und Gehäuse . . 22... 22 mn n nenn... —
Sonderangebot
Chinon Laufwerk SE jez 9,
incl. Kabel u. Gehäuse
Gesamt-Preisliste anfordern! Preise inclusive gesetzlicher Mehrwertsteuer.
Händlerpreisliste bitte schriftlich anfordern!
8 Ze] NICH-1/-Targelslle-
DFÜ 02373/66877
Tel. 02373/63159
Holtewiese 2
5750 Menden |
@B15:
ÖB18:
QBlA:
ÖB1D:
ÖBIF:
QB22:
QB24:
QB25:
0B27:
QB28:
OB2A:
BB2C:
PB2E:
OB39:
0B33:
0B34:
BB36:
BB37:
0B38:
DB3A:
QB3B:
@B3D:
ÖB3F:
QBAB:
QB4l:
0B42:
QB43:
®B44:
®B46:
QB49:
BBAC:
®BAD:
BB5ß:
0B53:
BB56:
0857:
0B58:
0B59:
QB5A:
OB5D:
OB5F:
ÖB6l:
QB64:
0B67:
@B69:
OBEB:
BEE:
ÖBEF:
BB7l:
0B72:
0B75:
0B78:
®B79:
OBTB:
QB7D:
ÖBTE:
@B81:
0B83:
0B85:
0B87:
QB88:
0B89:
BBSC:
ÖBSE:
BB9P:
0B93:
0B35:
®B96:
0B98:
BOB:
BBSD:
ÖBSE:
BBAB:
QBA3:
QBA5:
40
es Ss Sn ec
1")
06
FF
04
Ad
c2
68
85
85
Ad
Bl
Fo
20
c8
Dp
18
98
65
A8
AS
69
48
98
48
69
A9
AA
99
c9
DO
38
69
8D
Ag
A2
29
BP
69
04 FC
FF
dB 02
94
DA Cı1
62
1)
91
Bl
v1)
#6
ED FD
F6
1)
Q1
1")
90
23 PC
22 9C
21 GC
24 GC
79 ®D
00 92
30 93
F7
o1
FA @B
05
d6
26 BC
FA @B
02
FA @B
#9
5
FA OB
#1
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
349
341
342
343
344
345
346
347
348
349
359
351
352
353
354
355
356
357
358
359
369
361
362
363
364
365
366
367
368
369
37
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
.
PTYPES
DTYPES
DCHARS ASC
*
" TABB"
DFB 9,4,$FC,6,$FF TXT/BAS/BIN/SYS
DFB $FF,9,2,4,4 X/T/A/B/B
* PRINT ROUTINE nach Andy Hertzfeld...
*
PRINT PLA
STA
PLA
STA
LDY
LDA
BEQ
JSR
INY
BNE
CLC
TYA
ADC
TAY
LDA
ADC
PHA
TYA
PHA
RTS
PRT1
PRTZ
*
aka aaa
* FILE MANAGER-AUFRUFE *
aka aka aka aka
*
DOSTYP
*
OPEN
DFB
LDY
STY
STY
INY
STY
STY
LDA
LSR
LSR
LSR
LSR
STA
LDA
LDY
STA
STY
LDY
LDA
STA
DEY
BPL
DEX
LDA
STA
DEX
BPL
CLRNAME
MVNAME
LDA
TAX
JSR
BCC
CMP
BNE
SEC
FOPEN RTS
*
”
CREATE STA
LDA
LDX
JSR
BCS
RTS
CLOSE LDA
JSR
BCS
RTS
LDA
JSR
BCS
RTS
DELETE
MSGPNT
MSGPNT+1
#$01
(MSGPNT) ,Y
PRTZ
COUT
PRT1
MSGPNT
MSGPNT+1
#509
®
+$09
TVOLNO
TRECLEN+1
TRECLEN
TDRIVE
IOB+1
A
A
A
A
TSLOT
#>NAMBUF
#+NAMBUF
TNAME+1
TNAME
+39
#+$A9
NAMBUF , Y
CLRNAME
IN,X
NAMBUF, X
MVNAME
+$01
CALLFMAN
FOPEN
#+$06
FMERR
TTYPE
#501
#509
CALLFMAN
FMERR
#92
CALLFMAN
FMERR
#05
CALLFMAN
FMERR
Returnadresse
zeigt auf den
auszugebenden
Text selber
<dd> =
Textende
der ausgegebene
Text wird über-
sprungen (Erhö-
hung der Return-
adresse)
DOS-Dateityp
Volume-Nummer
Recordlänge High
=> $0pp1
Drive 1
RWTS-Slotnummer
/ 16
Adresse des
Dateinamens
Der Dateinamen-
bereich wird
auf '" " gelöscht
und der einge-
gebene Name wird
hineingeschrieben
Kommando: OPEN
=> kein CREATE
=> Datei existiert
-> nicht NOT FOUND
DOS-Filetyp
Kommando: OPEN
CREATE erlaubt
Kommando: CLOSE
Kommando: DELETE
QBAG:
QBAT:
QBAA:
ÖBAC:
ÖBAF:
QBB7:
QBBA:
QÖBBB:
ÖBBC:
ÖBBF:
BBC2:
QBC3:
BBCA:
BBC6:
BBC9:
ÖBCB:
ÖBCE:
BD:
BBD3:
ÖBD5:
QBD8:
QBDA:
ÖBDD:
ÖBEP:
OBE3:
QBES5:
BET:
BEA:
BED:
ÖBEF:
ÖBF2:
QBFA:
BÖBF7:
ÖBF9:
QBFA:
ÖBFD:
BcpB:
dc92:
BCpA:
ÖCd6:
dcB9:
DCBB:
BCHC:
ÖCBE:
dc1l:
C13:
BC15:
dc18:
dC19:
ÖC1B:
CIE:
dc21:
d023:
ÖC24:
0C25:
BC27:
BÖC2B:
BC2D:
ÖC2F:
9032:
0034:
BC37:
ÖC3A:
ÖCSC:
ÖC3F:
BC4l:
DC4AA:
BCAC:
dCc5B:
48
20
8D
c6
CE
BA
0
68
29
29
38
69
84
8E
A9
8D
A9
29
A5
8D
A9
ac
8D
20
85
84
AB
91
88
19
20
Bl
99
88
19
AD
69
91
9
Pl
D6
59
6B
BP
np
A9
8D
29
Dp
29
8D
c4
c5
c5
8D
24
87
CD
AD
Ad
DA
8E
93
93
OF
10
8D
31
9F
18
24
87
c9
c3
c5
7)
dB
cl
c6
A4
FD
FD
BC
BC
dB
BC
dB
BC
BC
dc
BC
dc
dB
dc
#3
BC
03
BC
dc
BC
BC
DB
D2
D4
D2
405
406
407
408
409
c5 C8
419
all
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
489
481
482
483
484
485
486
487
488
489
490
CF D2
491
cc c5 D2
WR16
WRITE
*
*
CALLFMAN
SETFMAN
GETFMAN
*
OPCODE
SUBCODE
TRECLEN
TVOLNO
TDRIVE
TSLOT
TTYPE
TNAME
RTNCODE
u
TWRNUM
TWRADDR
*
PHA
JSR
HEX
ASC
HEX
PLA
JSR
JSR
SEC
RTS
STY
STX
LDA
STA
LDA
JSR
LDA
STA
LDA
JMP
STX
STY
LDA
LDY
STA
STY
LDA
STA
LDA
JSR
BCS
RTS
STA
JSR
STA
STY
LDY
LDA
STA
DEY
BPL
JSR
LDY
LDA
STA
DEY
BPL
LDA
RTS
DS
DS
DA
DFB
DFB
DFB
DS
DA
DS
DA
DA
DA
EQU
EQU
PRINT
8D87
Fehlernummer
"FMAN-FEHLER: $"
99
PRBYTE
CROUT
TEMP
TNAME
#01
SUBCODE
+04
CALLFMAN
TEMP
TNAME
+504
CALLFMAN
TWRNUM
TWRNUM+1
#+>DTABUF
+9
TWRADDR+1
TWRADDR
+$02
SUBCODE
+$04
CALLFMAN
FMERR
OPCODE
FMANLOC
PTR+1
PTR
#$11
OPCODE,Y
(PTR),Y
SETFMAN
FMAN
#$11
{PTR).Y
OPCODE,Y
GETFMAN
RTNCODE
2
1
$oH91
d
o1
d6
1
NAMBUF
2
TWORK
TTSLIST
TDBUF
TSLOT
TNAME
druckt Hexzahl
<CR> danach
WR16 schreibt
zwei Byte, dabei
findet kein
Disk-I/0 statt
-> 1. Byte
2. Byte
schreibt X-Y Byte
in die DOS-Datei
Daten werden ab
DTABUF geschrieben
=> WRITE RANGE
schreibt RANGE
Aufruf mit OPC
-> zur Parmliste
Parmliste wird
in FMan kopiert
FMan-Aufruf
Rückkopie der
FMan-Parmliste
Carry unverändert!
Recordlänge
Volume-Nummer
Drive 1
aus RWTS gesetzt!
DOS-Filetyp
Startadresse Name
Workspace
$1ß0 Bytes
$190 Bytes
für WRITE RANGE
für WRITE RANGE
er
* ProDOS-Directory lesen & absuchen *
ek
*
CRFLAG
*
PRTDIR
D9 AB CC
DS
LDA
STA
JSR
BNE
JSR
HEX
ASC
HEX
l
#+$8D
CRFLAG
GETIST
PRTENT
PRINT
8D87
<CR> oder CHR$ (128)
PTR -> 1. Eintrag
"DIRECTORY LEER!"
8DAP
Peeker 1/86
0052: 38
BC53: 69
BC54: 29
ÖC56: AA
dC57: 20
ÖC5A: B9
ÖC5D: 29
dc6ß: A9Y
dC62: 20
BC65: AB
dC67: Bl
ÖC69: 99
ÖCc6EB: 29
ÖC6E: C8
ÖC6EF: CA
dCc7®: DB
ÖCc72: A9
dC74: 85
ÖC76: 29
dC79: 29
ÖC7C: D®
ÖCTE: 29
ÖC8l: 18
ÖC82: 69
BC83: AD
Öc86: 49
ÖC88: 8D
ÖCc8B: 29
ÖC8E: C9Y
ÖCc99: DP
ÖC92: A5
BC94: C9
dC96: 9
dC98: 29
ÖC9B: 29
CIE: 69
ÖCYF: A9
dCAl: 85
BCAS: A9
BcAS: DP
CAT: A5
BCA9: 18
BCAA: 6D
CAD: A8
ÖCAE: 99
ÖCBß: E6
ÖCB2: A5
BCBA: AA
ÖCB5: 99
ÖCB7T: C9
ÖCB9: F®
ÖCBB: A®
ÖCBD: 84
ÖCBF: A®
ÖCCl: Bl
dCc3: FB
ÖCC5: 69
BCcc6: 29
BCC8: C5
ÖCCA: D®
ÖCCC: A8
ÖCCD: AA
ÖCCE: CA
ÖCCF: Bl
ÖCD1: 99
ÖCD3: DD
ÖCD6: D®
ÖCD8: 88
ÖCD9: DP
ÖCDB: 29
ÖCDE: B9
ÖCEL: 29
ÖCE3: 69
ÖCEA: A9
ÖCES: 85
BCES: A9Y
ÖCEA: A2
ÖCEC: Aß
ÖCEE: 29
ÖCFl: BB
ÖCF3: AD
Peeker 1/86
05
80
0)
dB
F3
d6
1A
Fö
94
09
11
02
1")
85
8l
dB
FD
FD
FD
BC
BC
dc
BC
dc
FD
DA
FC
dB
dB
492
493
494
495
496
497
498
499
599
501
592
503
504
505
596
507
598
509
519
511
512
513
514
515
516
517
518
519
529
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
549
541
542
543
544
545
546
548
549
559
551
552
553
554
555
556
557
558
559
569
561
562
563
564
565
566
567
568
569
579
571
572
574
575
576
577
578
579
580
581
582
+
PRTENT
PRTNAM
DOCR
CRDONE
*
*
GET1IST
*
GETNXT
GTN1
SETPTR
GOTENT
u
*
CMPNAME
CMPLOOP
NOTSAME
*
*
*
RDDIR
RDD1
SEC
RTS
AND
TAX
JSR
LDA
JSR
LDA
JSR
LDY
LDA
ORA
JSR
INY
DEX
BNE
LDA
STA
JSR
JSR
BNE
JSR
CLC
RTS
LDA
EOR
STA
JSR
CMP
BNE
LDA
CMP
BCC
JSR
JSR
RTS
LDA
STA
LDA
BNE
LDA
CLC
ADC
TAY
BCC
INC
LDA
LSR
BCC
CMP
BEQ
LDY
STY
LDY
LDA
BEQ
RTS
AND
CMP
BNE
TAY
TAX
DEX
LDA
ORA
CMP
BNE
DEY
BNE
JSR
LDA
AND
RTS
LDA
STA
LDA
LDX
LDY
JSR
BCS
LDA
#$@F
GETTYP
DCHARS, Y
COUT
#$A9
COUT
+$01
(PTR) ,Y
+$89
COUT
PRTNAM
+20
CH
DOCR
GETNXT
PRTENT
DOCR
CRFLAG
+$0D
CRFLAG
COUT
#+$8D
CRDONE
CV
#19
CRDONE
CRCONT
HOME
#>DIRBUF
PTR+1
+$94
GTN1
PTR
DIRBUF+$23
SETPTR
PTR+1
PTR+1
A
SETPTR
#$9C
GOTENT
+504
PTR
+$99
(PTR) ,Y
GETNXT
#+$0F
TEMP
NOTSAME
(PTR) ,Y
+$80
IN,X
NOTSAME
CMPLOOP
GETTYP
DTYPES,Y
#$FQ
+$94
TEMP
#>DIRBUF
+$92
#509
RDBLOCK
DIREND
RDADDR+1
=> kein einziger
Eintrag vorhanden
=> Namenslänge
ProDOS-> DOS-Filetyp
" " 7 A, B
Space danach
Ausgabe des
Dateinamens
Zähler für Länge
zwei Einträge
pro Zeile, CR
nach jedem 2.Eintrag
nächster Eintrag
bis DIR-Ende
"Toggle'": einmal
wird CHR$(128),
danach wieder <CR>
ausgegeben
war <CR>?
über Zeile
28 hinaus?
"RETURN = Weiter"
holt den 1.
besetzten Eintrag
nach Vol-Name
"always!
holt folgende
Einträge aus DIR
Eintragslänge
neuer Block?
-> innerhalb Block
DIR-Ende/2
-> DIR-Ende
nächster DIR-Block
Test 1.Byte
des Eintrags:
-> BB: gelöscht
"NE": Eintrag
Aufruf mit 1.Byte
des Eintrags
Längen ungleich
Vergleich DIR-
Eintrag mit
eingegebenem
Dateinamen und
Test auf gültigen
Dateityp für
Konversion
< $ßF, wenn o.k.
-> EQ, wenn o.k.
"EQ"': gefunden
4 Blocks
Herunterzähler
Zieladresse High
Block $9992
-> RWTS-Fehler
wurde erhöht
Prccs 49 MERLIN
von Glen Bredon
Der professionelle Macro-Assembler für
die Apple Il-Familie!
Neben allen Standard-Features bietet
MERLIN u.a.:
komfortabler Editor mit globalen
Such- und Ersetzfunktionen
liest und schreibt DOS 3.3 Text- und
Binärfiles
unterstützt 6502-
Opcodes
beinhaltet eine Bibliothek mit fertigen
Unterprogrammen
enthält einen Disassembler mit eige-
ner Label-Bibliothek
kompatibel mit vielen 80-Zeichen-
karten und natürlich mit Apple //e
und Apple //c
und 65C02-
Jetzt mit deutschem Handbuch!
ISBN 3-89058-024-6 DM 198,
Bei Ihrem Apple-Händler, in guten Buch-
handlungen, oder direkt vom Verlag:
Ampersand*, Teltower Damm 168,
D-1000 Berlin 37, (030) 815 80 69
*vormals Pandabooks
EEE EE EM EM Beselkoupor HH BB BE
Name
Anschrift
O V-Scheck liegt bei (spesenfreie Lieferung)
O per Nachnahme (zzgl. DM 3,— Versandspesen)
Ex. MERLIN &DM 198,-
41
BCF6:
ÖCF9:
ÖCFC:
ÖCFD:
ÖCFF:
BD®1:
ßDB2:
PDP3:
DPA:
BDp6E:
BDP9:
ÖDIC:
ÖDPF:
ßD12:
ßD15:
0D17:
®D19:
ÖDI1B:
ÖDID:
ÖDIF:
®D21:
BD24:
PD26:
0D29:
ÖD2B:
ÖD2E:
®D31:
0D34:
®D35:
BD37:
PD3A:
ÖDSC:
ÖD3F:
ßD41:
ÖD44:
®D4A7:
ÖDAA:
DAB:
ÖDAE:
ßD51:
D53:
BD56:
BD59:
BDSC:
PD5E:
PDEl:
PD63:
ßD65:
BD67:
ßD69:
PDEB:
BDED:
ÖDEE:
dD79:
9D72:
0D73:
0D75:
0D76:
0D78:
ÖD7A:
ODTB:
BD7C:
D7D:
ÖD8P:
®D84:
BD85:
D88:
ÖD8B:
ÖDSE:
DB:
dD91:
42
AE 76 PD 583
AC 77 0D 584
E8
c6 99
D® ED
69
u)
11)
A9 DB
8D 92
8D 93
AE 11
AC 12
AD 99
c9 19
FO 39
c9 29
A9 11
20 85
Bß 4AF
AE 93
Dp 19
AE 92
BC 99
BD 99
A9 13
20 85
Bö 39
EE 92
A2 99
8E 93
BC 99
BD 99
AD 2F
20 85
Bß 22
EE 3
AD 76
BD 77
Fö 17
AC 43
Dp 12
84 95
A2 92
Bl 95
09 80
91 95
E6 96
D® F2
pD 99
1 69
@1
B9
1")
1")
90 11
01
8E 76
8Cc 77
8D 81
85 96
ßD 76
dD
BD
93
93
03
BD
DD
DD
12
11
AD
PD
BD
13
DA
dD
BD
dD
dD
BB
BD
öD
dD
585
586
587
588
589
599
591
592
593
594
595
596
597
598
599
6%
6P1
692
603
604
695
696
607
608
699
619
611
612
613
614
615
616
617
618
619
629
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
649
641
642
643
644
645
646
647
648
649
659%
651
652
653
654
655
656
657
658
659
669
661
662
663
664
665
666
667
668
669
679
671
672
673
LDX
INX
DEC
BNE
DIREND RTS
”
*
BLOCKNO
BLOCKNO+1
TEMP
RDD1
nächster Block
FERKKKRRRFEKKRTE TFT I
* PRODOS-DATEI EINLESEN
*
FRRRKKKKTETKTKTT TH EEE
*
MINDEX DFB ® Index im Master
IINDEX DFB ® Index im Index
*
RD1ST LDA #9 liest 1.Block
STA MINDEX Master-Index
STA IINDEX Index-Index
LDX STYP+$11
LDY STYP+$12 Nummer 1.Block
LDA STYP
AND #$F® => Storage Type
CMP +#$19
BEQ TYPEIl nur 1 Datenblock
CMP #$29
BEQ TYPE2 1 Indexblock
LDA #>DIRBUF
JSR RDBLOCK Master-Block
BCS RDEND in DIR-Bereich
*
RDNEXT LDX IINDEX Index im Index-
BNE RDDATA Block: wenn =>
LDX MINDEX dann nächster
LDY DIRBUF+$1@®,X Indexblock
LDA DIRBUF,X -> Blocknumnmer
TAX
TYPE2 LDA #>DIRBUF+$29®
JSR RDBLOCK Indexblock
BCS RDEND
INC MINDEX Index im Master
LDX +#$99
STX IINDEX Index im Index
RDDATA LDY DIRBUF+$309,X
LDA DIRBUF+$209,X
TAX Blocknummer
TYPEl LDA DADDR Zieladresse
JSR RDBLOCK
BCS RDEND
INC IINDEX Index-Index+tl
LDA BLOCKNO war das ein
ORA BLOCKNO+l1 leerer Block?
BEQ RDEND -> kein SETMSB
LDY DOSTYP TXT-Datei?
BNE RDEND
STY PTR PTR+1l ist gesetzt
LDX +#$92
SETMSB LDA (PTR),Y TXT: MSB wird
ORA #$89 innerhalb des
STA (PTR),Y Blocks gesetzt
INY
BNE SETMSB
INC PTR+l
DEX Zähler: $2@® Byte
BNE SETMSB
RDEND RTS
*
*
een
* ProDOS-Blockread via RWTS «
BR
*
BLOCKNO DA $p00B ProDOS-Block
*
IOB HEX #169 Type + Slotx16
DRIVE DFB 91
VOLNO DFB 9® Volume-Nummer
TRACK DFB 99
SECTOR DFB 98
DS 2 DCT-Pointer
RDADDR DA DIRBUF READ-Zieladresse
DS 2 Sector Count
IOBCMD DFB #1 Kommando:
*
READ
KERKRKKRRRTHHHH HIHI HH KH KK KK KK
*
RDBLOCK STX
STY
STA
STA
TYA
ORA
BLOCKNO
BLOCKNO+1
RDADDR+1
PTR+1
BLOCKNO
Aufruf mit Blockno
in X(Low), Y(High)
f. SETMSB, CLRBLK
Blockno = ß9 99?
BD94:
ßD96:
0D97:
®D99:
ÖDSB:
ÖD9D:
ÖDYE:
DAB:
BDA2:
QDA3:
PDAS5:
ÖDAG:
BDAT:
ÖDAA:
QDAB:
ÖDAD:
ÖDAE:
ÖDBl:
ÖDB2:
ßDBA:
ßDB5:
ÖDB7:
ÖDB8:
ÖDBB:
ÖDBE:
GDCP:
PDC3:
dDC6E:
BDC7:
dDCA:
ÖDCB:
PDCE:
ÖDD1:
ÖDD3:
ÖDD6:
ÖDD9:
PDDB:
ÖDDD:
ÖDDF:
ÖDE2:
ÖDES:
DET:
ÖDEA:
ÖDEB:
DEE:
ÖDFP:
ÖDF3:
DFB:
ÖDFE:
ÖDFF:
dEP1:
dEB3:
BEBE:
DEB9:
DEBA:
DEBB:
BEPBE:
dEI3:
BEIG:
BEIB:
BEIB:
DEID:
BEIE:
DE2B:
DE23:
DE2B:
BE28:
DERA:
DEZB:
DEZE:
DE3PB:
DE32:
8C 7C ®D
2E 7C ®D
29 9F
8D 7D PD
2 13 BE
Bo 94
EE 81 @D
69
20 24 @B
8D 87
D2 D7 DA
D3 AD C6
BA AB A4
0)
Ad BD
Bl 97
20 DA FD
20 SE FD
38
6%
DD OD MB
99 97 05
20 2B ®E
AB GC
BI 78 PD
91 97
88
DO F8
20 E3 3
20 D9 93
A9 99
85 48
69
20 ES 93
84 07
85 98
69
1584 Bytes
674
675
" 676
677
678
679
68%
681
682
683
684
685
686
687
688
689
699
691
692
693
694
695
696
697
698
699
798
781
782
783
784
785
706
787
798
799
719
Til
712
713
714
715
716
77
718
719
728
ai
722
05 C8 CC C5 D2
723
724
725
726
127
728
729
73®
731
03 91
7132
733
734
735
736
737
738
739
749
741
742
743
744
745
746
747
748
CLRBLK
XLATE
SETTRK
*
RDERR
»
RETRANS
u
RDSEC
MVIOB
*
GETIOB
BNE
TAY
STY
LDX
STA
INY
BNE
INC
DEX
BNE
CLC
RTS
STY
TXA
ASL
ROL
DEY
BNE
TXA
AND
TAX
LDA
STA
LDY
STY
STY
INY
STY
INY
STY
JSR
BCS
INC
LDA
SBC
ADC
AND
STA
JSR
BCS
INC
RTS
JSR
HEX
ASC
HEX
LDY
LDA
JSR
JSR
SEC
RTS
DFB
JSR
LDY
LDA
STA
DEY
BNE
JSR
JSR
LDA
STA
RTS
JSR
STY
STA
RTS
XLATE
PTR
+$02
(PTR) ,Y
CLRBLK
PTR+1
CLRBLK
TRACK
#395
A
TRACK
SETTRK
#+$97
RETRANS,X
SECTOR
#309
VOLNO
RDADDR
IOBCMD
DRIVE
RDSEC
RDERR
RDADDR+1
SECTOR
+01
137]0)
#+$0F
SECTOR
RDSEC
RDERR
RDADDR+1
PRINT
8D87
= 9
$290 Bytes löschen
nicht belegte
Blocks ("sparse")
werden gelöscht
Blockno High
Blockno Low
5 Shifts links
=> Teilung / 8
Blockno Low
-> phys. Sektorno
für RWTS: Zurück-
übersetzen!
Volume-Nummer 99
Zieladresse Low
Kommando: READ
Drive 2
liest 1. Sektor
—> RWTS-Fehler
Zieladresse+$19®
0DB97531
wird zu:
ECA86A2F
-> 2. Sektor
liest 2.Sektor
"RWTS-FEHLER: $"
u)
#13
(IOBPNT),Y
PRBYTE
CROUT
Fehlernumnmer
<CR> danach
0,$D,$B,9,7,5,3,1 rückwärts
GETIOB
#$0C
IOB,Y
(IOBPNT),Y
MVIOB
RWTSLOC
RWTS
#309
PREG
RWTSLOC
IOBPNT
IOBPNT+1
setzt IOBPNT
lädt Y-A
RWTS-Aufruf
Bug-Fix
lädt Y-A
Peeker 1/86
Designer
Zeichensatz-Generator in Apple-Pascal
von Gabor Herr
Wenn Sie zu den Programmierern gehö-
ren, die vergeblich versucht haben, in Ap-
ple-Pascal im Grafikmodus einen deut-
schen Text mit Umlauten auf den Bild-
schirm zu bringen, oder den mitgelieferten
Zeichensatz einfach langweilig finden und
sich künstlerisch betätigen möchten, dann
ist dieses Programm genau richtig für Sie.
1. Zeichendarstellung in Pascal
Im Gegensatz zu Applesoft-BASIC ist es
in Pascal möglich, Strings oder Texte mit
Hilfe der beiden Befehle „Wchar“ und
„Wstring“ im Grafikmodus auf dem Bild-
schirm auszugeben. Wie funktionieren
nun diese beiden Prozeduren?
In der Turtlegraphics-Unit wurde die An-
weisung „Drawblock“ implementiert, mit
deren Hilfe sich eine Punktmatrix auf dem
Grafikbildschirm darstellen läßt. Wurde
z.B. eine 10x10-Punkte große Matrix in
einem Feld, das folgendermaßen dekla-
riert wurde:
Bild:
Packed Array (1..10,1..10) of Boolean
abgelegt, so kann es mit
Peeker 1/86
= = BRERUTE
Drawblock (Bild, 2, 0, 0, 10, 10, 5, 20, 10)
auf den Hires-Bildschirm ausgegeben
werden. Die Matrixpunkte werden vom
Pascal-System als Bits in Bytes zusam-
mengefaßt und in der Variablen „Bild“ ab-
gespeichert. Beim Aufrufen der Prozedur
„Drawblock“ werden diese Bytes zeilen-
weise in den Grafikspeicher kopiert. Des-
halb muß als zweiter Parameter die Anzahl
der Bytes, die zur Darstellung einer Zeile
nötig sind, angegeben werden. Die für den
Kopiervorgang benötigten Daten werden
durch die folgenden Parameter bestimmt:
Drawblock (Matrix, Bytes, xs, ys, w, h, x0,
y0, Mode)
Matrix: Variable, die die Punktmatrix ent-
hält
Bytes: Anzahl der Bytes ((w+15) div 16)
*2
xs, ys: Anzahl der Punkte, die bei der
Darstellung in x- bzw. y-Richtung über-
sprungen werden sollen
w, h: Breite und Höhe der Matrix
x0, yO: Koordinaten der Bildschirmposition
(linke untere Ecke der Matrix)
Mode: Modus wie bei Chartype (z.B. 10
für „Kopiere Array“)
ucsd er
Bei der Darstellung von Texten greifen
„Wchar“ und „Wstring“ auf diese Proze-
dur zurück. Sie verwenden für jedes Zei-
chen eine 8x8-Punktmatrix. Der Zeichen-
satz enthält 128 Zeichen und ist nach dem
bekannten ASCIl-Code aufgebaut. Es
wurden lediglich die Ctrl-Zeichen durch
Grafiksymbole z.B Apfelzeichen,
Schachfiguren usw.) ersetzt. Die Zeichen-
muster sind in einem Feld zusammenge-
faßt und in einer Datei unter dem Namen
„SYSTEM.CHARSET“ auf der Diskette
„APPLE1“ abgelegt. Bei der Initialisierung
der Turtlegraphics-Unit wird der Zeichen-
satz in den Arbeitsspeicher geladen, wo er
während der Programmausführung auch
bleibt. Mit Hilfe des „Designers“ istes nun
möglich, diese oder eine genauso aufge-
baute Datei zu laden, die einzelnen Zei-
chen zu editieren und sie dann wieder
abzuspeichern.
2. Bedienung des Programms
Das Programm ist menügesteuert, ähnlich
wie das Pascal-System. Bei der Eingabe
der folgenden Kommandos dürfen Sie
kleine und große Buchstaben verwenden:
L(oad: Laden eines Zeichensatzes von
der Diskette. Ist die gesuchte Datei nicht
vorhanden oder hat sie nicht das passen-
de Format, so wird die Fehlermeldung
„Datei fehlt“ ausgegeben.
S(ave: Speichern des aktuellen Zeichen-
satzes auf der Diskette. Eine schon beste-
hende Datei mit dem gleichen Namen wird
überschrieben. Deshalb geben Sie nur
dann „SYSTEM.CHARSET“ ein, wenn da-
von bereits eine Sicherheitskopie existiert.
N(eu: Löschen des Speichers. Nach der
Eingabe dieses Kommandos werden Sie
gefragt, ob nur das angezeigte Zeichen (=
C(har), oder der ganze Zeichensatz (=
A(lle) gelöscht werden soll.
V(erify: Das aktuelle Zeichen wird neben
der Matrix auch in Originalgröße darge-
stellt.
Q(uit: Beenden des Programms
+, -: Das folgende bzw. vorangehende
Zeichen wird zum Editieren auf dem Bild-
schirm angezeigt. Diesem Kommando
kann ein Faktor (2-127) vorangestellt wer-
den. Die Eingabe „30+" würde beispiels-
weise die Zeichenposition um 30 Zeichen
vorrücken.
Leertaste: Mit Hilfe der Leertaste kann ein
Punkt in der Matrix gesetzt bzw. gelöscht
werden.
Die Ebenen Save, Load und Neu können
bei falschen Eingaben mit der „ESC“-Ta-
ste verlassen werden. Die Tastenbele-
gung für die Kursorsteuerung ist durch
Konstanten (cu_l, cu_r... usw.) im Deklara-
43
tionsteil festgelegt. Die im Listing abge-
druckten Zahlen beziehen sich auf einen
Apple Ile; für andere Apple-Typen können
sie leicht abgeändert werden.
3. Beispiel
Nach dem Starten des Programms er-
scheint auf dem Monitor ein großes Qua-
drat für die Darstellung der Matrix und eine
Zeile mit den Kommandos. Gibt man die
Anweisung „L“ für Load und dann „xSY-
STEM.CHARSET“ ein, so wird der Stan-
dard-Zeichensatz geladen. Nach dem
Drücken der „+"-Taste erscheint das er-
ste Zeichen, hier das „Apple“-Symbol,
vergrößert auf dem Bildschirm. Mit Hilfe
der Leertaste ist es jetzt möglich, den
Punkt auf der Kursorposition zu setzen
bzw. zu löschen. Um das neu erstellte
Zeichen in Originalgröße zu sehen, muß
das Kommando „Verify“ eingegeben wer-
den. Jede Änderung wird direkt in den
Speicher geschrieben, so daß man mit
„Save“ den aktuellen Zeichensatz jeder-
zeit auf der Diskette abspeichern kann.
Kurzhinweise
1. Zweck:
Entwurf neuer und Änderung alter Zei-
.chensätze
2. Konfiguration:
Apple II+/e/c; Apple-Pascal 1.1 oder 1.2
3. Test:
E(xecute DESIGNER.CODE
4. Sammeldisk:
DESIGNER.TEXT
(Quelltext als DOS-3.3-Textfile, der mit
GETDOS konvertiert und dann als
DESIGNER.CODE compiliert werden muß.)
DESIGNER.TEXT
Unter Apple-Pascal 1.1 oder 1.2
über C(ompile als DESIGNER. CODE
compilieren.
Dann zu Übungszwecken über
E(execute DESIGNER.CODE starten
und über L(oad und
Welche Datei laden? "#4:SYSTEM.CHARSET"
einlesen.
( 38a ak aka ak ak ak ak ak a ak aa aka aaa)
(* Apple Pascal Designer 1.® x)
*)
Programm zur Aenderung von x)
Zeichensaetzen, die bei *)
den Prozeduren 'Wchar' und x)
'Wstring' verwendet werden. *)
( aka ak aka aka aaa)
{$C Gabor Herr 1984}
{$S+}
program designer;
uses turtlegraphics;
const x_anf=1ßß;
y-anf= 29; {Bildschirmposition der Matrix}
breite=1ß; {Groesse eines Matrixpunktes |}
{Kursortasten:}
cu_l=8 ;{ links }
cu_r=21;{ rechts}
cu_u=19;{ oben }
cu_d=11;{ unten }
(Steuertasten:}
esc=27; { escape}
bs =8 ; { backspace}
tchartable=packed array[ß..63] of boolean;
tcharset =array[ß..127] of tchartable;
charfile :file of tcharset;
| charset :tcharset;
chartable:tchartable;
index,zeile,spalte,indiff, faktor:integer;
procedure writes(pattern:string;x,y:integer);
{schreibt String auf der angegebenen Position}
begin
pencolor(none);
moveto(x,y);
wstring(pattern)
end;
procedure cleartxt;
{loescht Fenster auf dem Bildschirm}
begin
viewport(9,279,145,168);
fillscreen(black);
viewport(9,279,®,191)
end;
procedure clearch;
{loescht Matrix vom Bildschirm}
begin
viewport(99,189,19,19®);
fillscreen(black);
viewport(9®,279,9,191)
end;
44
m ——————————————————————————————————————————————————————————————————————————————————————————
if key=chr(bs)
{bei <bs> zuletzt eingegebenes Zeichen loeschen}
then
begin
if idx>l then
begin
idx:=idx-l;
move(7);
wchar(' ');
move(7)
end;
end
else
{sonst Echo ausgeben}
begin
wchar(key);
inword[idx]:=key;
idx:=idx+tl
end;
until eoln(keyboard);
inword:=copy(inword,1,idx-l);
end;
procedure plotpoint(xpos,ypos:integer;mode:boolean);
{setzt einen Punkt in die Matrix auf dem Bildschirm}
var color:screencolor;
begin
if mode then color:=white
else color:=black;
xpos:=xpos#*breite+tx_anf;
ypos:=ypos#breite+ty_anf;
viewport(xpostl,xpos+tbreite-2,ypos+tl,ypos+breite-2);
fillscreen(color);
viewport(®,279,9,191)
end;
procedure writechar(nr:integer);
{zeichnet einen Charakter vergroessert
und in Originalgroesse}
var zle,spt:integer;
nbr:string;
begin
for zle:=® to 7 do
begin
for spt:=® to 7 do
begin
if chartable[zlex8+spt ]
then plotpoint(spt,zle,true);
end;
end;
str(nr,nbr);writes(concat(nbr,' '),66,9®);
drawblock(chartable,1,0,0,8,8,201,91,19)
end;
procedure input(var inword:string;x,y:integer);
{String-Eingabe mit Echo im Grafikmodus}
var idx:integer;
key:char;
begin
idx:=1l;fillchar(inword,4®,chr(32));
pencolor(none);moveto(x,y);turnto(189);
repeat
read(keyboard,key);
if key=chr(esc) then
{bei <esc> Eingabe abbrechen}
begin
inword:='';
exit(input)
end;
procedure savechset;
{speichert den aktuellen Zeichensatz auf Diskette}
var filename:string;
Peeker 1/86
YAB2D AUIPAP DECKER 94
pEEkeR AUFTRAG FUR KLEINANZEIGEN
BO
Text unter folgender Rubrik:
[] suche Hardware [] suche Software OD) Verschiedenes
[] biete Hardware [] biete Software UL] Chiffre
u Bitte veröffentlichen Sie in der nächsterreichbaren Ausgabe nachstehenden
Bitte jeweils 32 Buchstaben pro Zeile-einschließlich Satzzeichen und Wort-
zwischenräume. Bitte Absender nicht vergessen. Mindestens 2 Zeilen.
Chiffregebühr DM 6,— zuzügl. MwSt.
Sie können unter dieser
Rubrik zu einem besonders
günstigen Preis
@ Ihre Hardware und
Software verkaufen
@ Ihre Hard- und Software
suchen en an a En
® Kontakte knüpfen und
vieles mehr
en
o
a
Gelegenheitsanzeigen o
En
‚Sete _______ erschienenen
Zu der im Peeker, Heft
Musteranzeige privat
1 Druckzeile a 32 Buch-
staben nur DM 5,50
zuzügl. ges. MwSt.
Mindestens 2 Druckzeilen
Beispiel:
Anzeige über
bitte ich um detaillierte Information.
Ich wünsche [| Prospekt, Datenblatt [] Preisliste [| schriftliches Angebot [| tel. Rückruf
Produkt und Bestellnummer
gebe ich neben-
stehende Bestellung
unter Anerkennung
Ihrer in der Anzeige
genannten Liefer- und
Zahlungsbedingungen
auf.
Verkaufe neuwertigen Typenrad-
drucker mit Apple-Interface.
Preis auf Anfrage. Tel. 007
nur DM 18,81 inkl. MwSt.
Unterschrift (für Jugendliche unter 18 Jahren der Erziehungsberechtigte)
vo
2
Z
=)
E
Q
E.
“
Musteranzeige gewerblich '
1 Druckzeile a 32 Buch- an a u Eu 5 DEE (ER En
staben nur DM 11,— zuzügl. a
ges. MwSt. Mindestens
2 Druckzeilen
Beispiel:
Schreiben Sie uns, wenn Sie technische Fragen zu Aufsätzen im Peeker
haben. Beachten Sie jedoch, daß die Redaktion keine Auskünfte über Be-
zugsauellen erteilt:
Neu im Angebot: Professionelle,
separate Tastatur für Apple II plus
16 Funktionstasten und separatem
Ziffernblock.
Fa. Keyboard & Co.
nur DM 62,70 inkl. MwSt.
IYVYYY
Vorname, Name
= o m
ie) “ en
2 N} 3
an | fee] eh)
© &
=
-—
PLZ/Ort
itte veröffentlichen Sie den um-
stehenden Text von Zeilen
DM in der nächsterreich-
aren Ausgabe vom Peeker
oO 2»
Bei Angeboten: Ich bestätige, daß ich alle
Rechte an den angebotenen Sachen besitze
Datum Unterschrift
=» Peeker-Börse
Karte bitte vollständig ausfüllen
Vorname, Name
=
=
D
Straße
PLZ/Ort
Telefon mit Vorwahl
Anschrift der Firma angeben, bei der Sie
bestellen bzw. von der Sie Informationen
wünschen
= Produkt-Karte
zz
Karte bitte vollständig ausfüllen
Vorname, Name
Firma
Straße
PLZ/Ort
Telefon mit Vorwahl
DD Info-Karte
POSTKARTE
Peeker-Börse
Anzeigen-Service
Dr. Alfred Hüthig Verlag
Postfach 10 2869
6900 Heidelberg 1
POSTKARTE
Inserent
Straße
PLZ/Ort
POSTKARTE
Peeker
Redaktion
Dr. Alfred Hüthig Verlag
Postfach 102869
6900 Heidelberg 1
EEE
Produkt-
Karte
Wünschen Sie
weitere Informatio-
nen zu einer der im
Heft erschienenen
Anzeigen?
Nichts einfacher als
das. Produkt-Karte
ausfüllen, frankieren
und an den
Inserenten (nicht an
die Peeker-Redaktion)
senden.
Vorher aber nicht
vergessen:
Kreuzen Sie an,
welchen Informations-
wunsch Sie haben.
Damit erleichtern Sie
dem Hersteller
eine gezielte Beant-
wortung Ihrer Anfrage.
Zum Schluß tragen
Sie auf der Rück-
seite die genaue
Anschrift des
Inserenten und Ihren
Absender ein.
DEEKER
{Die Ein- und Ausgabekontrollen
werden unterdrueckt, um zu
verhindern, dass beim Auftreten
eines Fehlers das Programm ab-
stuerzt.}
{$i-}
begin
writes('Welche Datei speichern?',®,16®);
input(filename,®,152);
cleartxt;
if filename='' then exit(savechset);
rewrite(charfile, filename);
if ioresult<>® then
{Fehlerbehandlung}
begin
writes( 'I/0-Fehler' ,®,16ß®);
writes('Return eingeben',®,152);
readln;cleartxt
end;
charfile?:=charset;
put(charfile);
close(charfile,lock)
end;
procedure loadchset;
{holt Zeichensatz von der Diskette}
var filename:string;
I, J : integer;
begin
writes('Welche Datei laden?',®,169®);
input(filename,®,152);
cleartxt;
if filename='' then exit(loadchset);
reset(charfile, filename);
if ioresult<>® then
{Fehlerbehandlung}
begin
writes('Datei existiert nicht',®,16®);
writes('Return eingeben',®,152);
readlIn;cleartxt
end;
charset:=charfilef;
close(charfile);
index:=ß;
chartable:=charset[index];
for I :=9 to 3 do
for J :=® to 31 do
drawblock(charset[Ix32+4J],1,0,0,8,8,Jx8,135-Ix9,1ß)
end;
{$i+} {Kontrolle wieder einschalten}
procedure newset;
{loescht den aktuellen Zeichensatz}
begin
fillchar(charset,sizeof(charset),chr(ß));
index:=ß;
chartable:=charset[index]
end;
procedure newchar;
{loescht das angezeigte Zeichen}
begin
fillchar(chartable,sizeof(chartable),chr(ß))
end;
procedure cursor(x,y:integer);
{Kursorposition anzeigen}
begin
chartype(6);
moveto(x*breite+x_anf+l,y*breite+ty_anf+l);
wchar('*');chartype(1®)
end;
procedure new;
{loeschen}
var key:char;
begin
writes('Neuer C(har oder A(lle?',®,16®);
repeat
read(keyboard,key)
until (key in ['c','C','a','A']) or (key=chr(esc));
if key<>chr(esc) then
begin
if key in ['c','C']
then newchar
else newset;
end;
cleartxt
end;
Peeker 1/86
vcsd 94
procedure invert;
{Punkt invertieren}
begin
if chartable[zeilex8+spalte]
then
chartable[zeilex8+spalte]:=false
else
chartable[zeilex8+spalte]:=true;
plotpoint(spalte,zeile,chartable[zeilex8+spalte]);
drawblock(chartable,1,9,0,8,8,201,91,1®);
cursor(spalte,zeile)
end;
procedure initialize;
{Variablen initialisieren und Bildschirm aufbauen}
begin
newset;
index:=ß;indiff:=ß;spalte:=ß;zeile:=ß;
initturtle;
moveto(®,18®);wchar(chr(1l));
writes('designer 1.® *N(eu,S(ave,L(oad,Q(uit',16,189®);
writes('v(erify,[-,+] next char, [sp] invert bit*',®,179);
moveto(®,169) ;pencolor (white) ;moveto(279,169);
pencolor(none) ;moveto(®,144);
pencolor (white) ;moveto (279,144);
pencolor(none);moveto(®,1ß6);
pencolor (white) ;moveto (279,196);
writes('char nr:ß',19,9®);
moveto(199,89) ;turnto(ß) ;pencolor (white);
move(ll);turn(9®);move(l11);turn(99);
move(ll);turn(9®);move(1ll);
pencolor(none);
viewport(97,182,17,1®2); fillscreen(white);
clearch
end;
procedure edit;
{Das eigentliche Hauptprogramm}
var key:char;
begin
repeat
cursor(spalte,zeile);
repeat
read(keyboard,key)
until key in LS Eee KR - SZ Br a Ele AUBe7 : 0
Eat EN! tt mi, I! 11,
‚9'..'9', chr(ou..l); ehrlewr),
chr(cu_u),chr(cu_d)];
case key of
'n','N':new;
's','S':savechset;
'1l','L':loadchset;
'+','!=!:if faktor=® then indiff:= 1
else indiff:=faktor;
'-','_':if faktor=ß then indiff:=-1
else indiff:=-faktor;
es :invert;
end;
cursor(spalte,zeile);
if key in [' ', '9'..'9', chr(cu_l), chr(cu_r),
chr(cu_u),chr(cu_d)]
then
begin
case ord (key) of
cu_l : if spalte>® then spalte:=spalte-];
cu_r : if spalte<7 then spalte:=spaltetl;
cu_u : if zeile>® then zeile :=zeile-];
cu_d : if zeile<7 then zeile :=zeile+tl;
end;
if key in ['ß'..'9'] then
{Voreinstellungsfaktor}
in faktor:=faktorx*1lß+ord(key)-48
else
begin
charset[index]:=chartable;
drawblock(chartable,1,90,9,8,8,index mod 328,
135-index div 329,19);
index:=indextindiff;
indiff:=ß; faktor:=ß;
if index<® then index:=ß;
if index>127 then index:=ß;
chartable:=charset[index];
clearch;writechar(index);
end;
until key in ['q','Q'];
end;
{Hauptprogramm}
begin
initialize;
edit =
end.
47
READPAS
Konvertierung von UCSD- in Turbo-Pascal-Textfiles
Wer bislang unter UCSD-Pascal bzw. Ap-
ple-Pascal 1.1 oder 1.2 gearbeitet hat und
nunmehr Programme unter Turbo-Pascal
entwickeln will, wird sicherlich einen Teil
seiner alten UCSD-Programme überneh-
men wollen. Allerdings kennt UCSD-Pas-
cal zahlreiche Befehle, die Turbo-Pascal
nicht kennt und umgekehrt. Ferner sind
diverse Feinheiten zu beachten, so daß es
mit der Konvertierung des UCSD-Pascal-
Textfiles allein nicht getan ist.
Das nachfolgende Turbo-Pascal-Pro-
compiliert werden muß, nachdem zuvor
die Endadresse (nicht die Startadresse!)
auf $C7FF gesetzt worden ist. Verfahren
Sie im einzelnen wie folgt:
1. Turbo-Pascal 2.0 oder 3.0 starten.
2. Quelltext eingeben und unter READ-
PAS.PAS abspeichern.
3. O(ptionen und dann C(om-File wählen
und zum Schluß E(nd-Address auf $C7FF
setzen.
4. Nunmehr vom Hauptmenü aus C(ompi-
lieren.
von Michael Erperstorfer
wie eine übliche COM-Datei mit
>READPAS
Das Programm setzt zwei Laufwerke vor-
aus. Die CP/M- bzw. Turbo-Pascal-Ar-
beitsdiskette legen Sie zweckmäßigerwei-
se in Laufwerk 1 (A; #4) und die Apple-
Pascal-Diskette in Laufwerk 2 (B; #5).
Nach dem Start von READPAS.COM kön-
nen Sie sich zunächst über Menü-Option
2 das UCSD-Pascal-Directory ansehen.
Danach brauchen Sie nur noch den Na-
men des gewünschten UCSD-Textfiles
gramm READPAS läuft sowohl unter Tur-
bo 2.0 als auch 3.0. Es ist jedoch darauf zu
achten, daß der Quelltext auf Diskette
READPAS
PROGRAM READPASCAL; {von Michael Erperstorfer}
CONST BUFFSTART=$C800; {START DES 128 BYTE LESEPUFFER}
TYPE
FILETYP=RECORD
FNAME: STRING[15];
VON:0..280;
BIS:0..280;
FTYP:STRING[4];
EOFBYTE:O..511
END;
VAR
BUFFER:ARRAY[O..127] OF BYTE ABSOLUTE BUFFSTART; {LESEPUFFER}
BLOCK: ARRAY[O..511] OF BYTE; {PASCAL-BLOCK}
DIRBLOCK: ARRAY[O..2047] OF BYTE; {4 BLOCKS FUER DIRECTORY}
PASBUFF:ARRAY[O..30719] OF BYTE; {PUFFER FUER PASCAL TEXT-FILE}
TAB: ARRAY[O..7,1..4] OF 0..31; {LOOK-UP TABELLE}
EINTRAG: ARRAY[1..77] OF FILETYP; {MAX 77 FILES IN PASCAL)}
OUT: TEXT;
VOLNAME:STRING[15];
BEZUGSLW , FILEZAHL ‚ BLZAHL: INTEGER;;
LWP ‚,LWC: CHAR;
PROCEDURE TABINIT; {SEKTOR/BLOCK-UMWANDLUNG PASCAL-CP/M}
BEGIN
TAB[O,1]:= 0; TAB[O,2]:= 1; TAB[0,3]:=12; TAB[0,4]:
TAB[1,1]:=24; TAB[1,2]:=25; TAB[1,3]: ; TAB[1,4]:
TAB[2,1]:=16; TAB[2,2]:=17; TAB[2,3]: ; TAB[2,4]:
TAB[3,1]:= 8; TAB[3,2]:= 9; TAB[3,3]: ; TAB[3,4]:
TAB[4,1]:=22; TAB[4,2]:=23; TAB[4,3]:= 2; TAB[4,4]:
TAB[5,1]:=14; TAB[5,2]:=15; TAB[5,3]: ; TAB[5,4]:
TAB[6,1]:= 6; TAB[6,2]:= 7; TAB[6,3]: ; TAB[6,4]:
TAB[7,1]:=30; TAB[7,2]:=31; TAB[7,3]: ; TAB[7,4]:
END;
PROCEDURE READBLOCK (BLNUM: INTEGER) ;
VAR SPURNUM, TABINDEX, I, ERROR: INTEGER;
PROCEDURE FILLBLOCK (NUM: INTEGER) ; {FUELLT PASCAL-BLOCKPUFFER)}
VAR J,BLINDEX: INTEGER; {MIT CP/M SEKTOR (4 MAL)}
BEGIN
BLINDEX:=(NUM-1)x128;
FOR J:=0 TO 127 DO
BEGIN
BLOCK[BLINDEX] :=BUFFER[J];
BLINDEX:=BLINDEX+1
END
END;
BEGIN
SPURNUM:=BLNUM DIV 8;
TABINDEX:=BLNUM MOD 8;
48
Die entstandene Objektcode-Datei starten
Sie dann unter dem CP/M-Betriebssystem
und darauf den ggf. gekürzten Turbo-Text-
file-Namen (mit Suffix „.PAS“) einzuge-
ben. Die konvertierte Datei läßt sich direkt
in den Turbo-Pascal-Editor einlesen.
FOR I:=1 TO 4 DO
BEGIN
BIOS(11,BUFFSTART); {SETZT BEGINN DES LESEPUFFERS}
BIOS(7); {SETZT KOPF AUF SPUR 0}
BIOS(9,SPURNUM) ; {SETZT SPURNUMMER}
BIOS(10,TAB[TABINDEX,I]); {SETZT SEKTORNUMMER}
BIOS(8,0RD(LWP)-65); {SETZT LAUFWERK}
ERROR:=BIOS(12); {LIEST SEKTOR IN LESEPUFFER}
IF ERROR<>O THEN
BEGIN
WRITELN(CHR(7),'I/O FEHLER IN LAUFWERK ',LWP,'.'); WRITELN;
WRITE( 'CP/M-DISKETTE EINLEGEN UND <RETURN> DRUECKEN ');
READLN;
BDOS(0)
END;
FILLBLOCK(I);
WRITE('.')
END
END;
PROCEDURE READDIRECTORY;
VAR I,J: INTEGER;
PROCEDURE GETFILES;
VAR K, INDEX, TYPNUM: INTEGER ;
BEGIN
INDEX :=26;
FILEZAHL :=0;
REPEAT
IF DIRBLOCK[INDEX+6]>O THEN
BEGIN
FILEZAHL :=FILEZAHL+] ;
WITH EINTRAG[FILEZAHL] DO
BEGIN
VON:=DIRBLOCK[ INDEX ]+DIRBLOCK[ INDEX+1 ]x256;
BIS:=DIRBLOCK[ INDEX+2 ]+DIRBLOCK[ INDEX+3 ]x256 ;
EOFBYTE:=DIRBLOCK[ INDEX+22 ]+DIRBLOCK[ INDEX+23 ]x256-1;
TYPNUM :=DIRBLOCK[INDEX+4 ] ;
CASE TYPNUM OF
2:FTYP:='CODE';
3:FTYP:='TEXT';
SYFTIF:="DATR"
END;
FNAME[O ] :=CHR (DIRBLOCK[ INDEX+6 ] ) ;
FOR K:=1 TO DIRBLOCK[INDEX+6] DO
FNAME[K] :=CHR(DIRBLOCK[6+INDEX+K ] )
END
END;
INDEX :=INDEX+26
UNTIL INDEX>2021
END;
BEGIN
CLRSCR;
WRITE('Das Directory wird gelesen');
FOR I:=2 TO 5 DO
Peeker 1/86
BEGIN
READBLOCK (I);
FOR J:=0 TO 511 DO DIRBLOCK[ (I-2)*512+J]:=BLOCK[J]
END;
VOLNAME[O] :=CHR(DIRBLOCK[6]);
FOR I:=1 TO DIRBLOCK[6] DO VOLNAME[I]:=CHR(DIRBLOCK[6+1]);
GETFILES
END;
PROCEDURE PRINTDIRECTORY;
VAR I, ZAEHLER: INTEGER;
BEGIN
IF FILEZAHL>O THEN
BEGIN
CLRSCR;
ZAEHLER:=0;
WRITELN( 'Directory der Pascal-Diskette ',VOLNAME, ':');
WRITELN;
WRITELN( ' Filename Laenge in Blocks Filetyp');
WRITELN ( '——-— ";
MEERE 15 CHBE NER VERHELEBEEPin EEE ESERDE A SENSERIERRE A EHE BENENNEN EDLER ) s
FOR I:=1 TO FILEZAHL DO WITH EINTRAG[I] DO
BEGIN
WRITELN(FNAME: 20, (BIS-VON):10,'
ZAEHLER :=ZAEHLER+H1 ;
IF (ZAEHLER=18) OR (I=FILEZAHL) THEN
BEGIN
WRITELN;
WRITE( 'Weiter mit <return> ');
READLN;
ZAEHLER:=0O;
CLRSCR
END
END
END
END;
',FTYP, '-FILE');
PROCEDURE TRANSFER;
VAR I,J, INDEX, ANFANG, ENDE: INTEGER;;
PASNAME, CPMNAME: STRING[15];
TABFLAG: BOOLEAN;
EIN: CHAR;
FUNCTION GETNAME: BOOLEAN;
BEGIN
CLRSCR;
WRITE('Name des Pascal-Textfiles: ');
READLN ( PASNAME) ;
IF POS('.TEXT' , PASNAME)=O
THEN PASNAME:=CONCAT (PASNAME, '.TEXT');
GETNAME:=FALSE;
FOR I:=1 TO FILEZAHL DO
IF EINTRAG[I].FNAME=PASNAME THEN
BEGIN
GETNAME:=TRUE;
INDEX :=I
- END
END;
PROCEDURE WRITEFILE;
VAR IND,I:INTEGER;
BEGIN
IND:=0;
FOR I:=ANFANG TO ENDE DO
BEGIN
READBLOCK (I);
FOR J:=0 TO 511 DO
BEGIN
PASBUFF[ IND] :=BLOCK[J] ;
IND:=IND+1
END
END;
READBLOCK (ENDE+1);
FOR J:=0 TO EINTRAG[INDEX].EOFBYTE DO
BEGIN
PASBUFF[ IND] :=BLOCK[J];
IND:=IND+1l
END;
N BIOS(8, BEZUGSLN) ;
IND:=IND-1;
TABFLAG:=FALSE;
WRITELN; WRITE('Name des CP/M-Files (ohne Laufwerksangabe):');
READLN (CPMNAME) ;
CPMNAME:=CONCAT (LWC, ':',CPMNAME) ;
ASSIGN (OUT, CPMNAME) ;
REWRITE(OUT);
FOR I:=0 TO IND DO
IF TABFLAG THEN
BEGIN N
FOR J:=1 TO PASBUFF[I]-32 DO WRITE(OUT,' '); {LEERZEICHEN}
TABFLAG:=FALSE
END
Peeker 1/86
TURDO 44
ELSE
BEGIN
CASE PASBUFF[I] OF
13:WRITE(OUT,CHR(13),CHR(10)); {LINEFEED ANFUEGEN}
16:TABFLAG:=TRUE; {NAECHSTES ZEICHEN: EINRUECK-WERT}
32..126:WRITE(OUT,CHR(PASBUFF[I])) {NUR LESBARE ZEICHEN}
END;
IF I MOD 128=0 THEN WRITE('.')
END;
CLOSE (OUT)
END;
BEGIN
CLRSCR;
WRITELN( 'Pascal-Diskette in das Laufwerk ',
LWP,' einlegen.'); WRITELN;
WRITE('F)ertig oder zurueck zum M)enu ? ');
REPEAT
READ(KBD,EIN); EIN:=UPCASE(EIN)
UNTIL EIN IN ['F','M'];
IF EIN='F' THEN
BEGIN
READDIRECTORY ;
IF NOT GETNAME THEN
BEGIN
WRITE ( PASNAME,
' nicht gefunden ! Weiter mit <return> ');
READLN;
PRINTDIRECTORY
END
ELSE
BEGIN
ANFANG :=EINTRAG[ INDEX] . VON+2;
ENDE :=EINTRAG[ INDEX] .BIS-2;
IF (ENDE-ANFANG)>58
THEN WRITELN(CHR(7), "Programm zu gross!')
ELSE WRITEFILE
END
END
END;
PROCEDURE MENU;
VAR AUSWAHL: CHAR;
ENDE: BOOLEAN;
BEGIN
ENDE:=FALSE;
LWP:='B'; {DEFAULT P-SYSTEM: LAUFWERK C}
LWC:='A'; {DEFAULT CP/M: LAUFWERK D}
REPEAT
CLRSCR;
GOTOXY(28,1); WRITELN('READPASCAL'); WRITELN;
WRITELN(' von Michael Erperstorfer'); WRITELN;
WRITELN(' Programm zum Lesen von UCSD-Textfiles');
WRITELN;
WRITELN('l...Laufwerk-Daten aendern (CP/M: ',
! . ı ! ' .
WRITELN: ING," Pascal: ",LWP,*")"');
WRITELN('2...Directory der Pascal-Diskette'); WRITELN;
WRITELN('3...Pascal-Texfile nach CP/M uebertragen'); WRITELN;
WRITELN('4...E ND E'); WRITELN; WRITELN;
WRITE( "Auswahl: ');
REPEAT
READ (KBD, AUSWAHL) ; WRITELN (AUSWAHL)
UNTIL AUSWAHL IN ['1'..'4'];
CASE AUSWAHL OF
'1':BEGIN
CLRSCR;
WRITE( 'Laufwerk fuer die CP/M-Diskette (<A>,<B>): ');
REPEAT
READ (KBD,LWC) ; WRITELN(LWC);
LWC:=UPCASE(LWC)
UNTIL LWC IN ['A','B'];
WRITE( 'Laufwerk fuer die Pascal-Diskette (<A>,<B>): ');
REPEAT
READ(KBD,LWP); WRITELN(LWP);
LWP:=UPCASE(LWP)
UNTIL LWP IN ['A','B']
END;
'2':BEGIN
READDIRECTORY;
PRINTDIRECTORY
END;
'3': TRANSFER;
'4':ENDE:=TRUE
END
UNTIL ENDE
END;
BEGIN
BEZUGSLW:=BDOS (25);
TABINIT;
MENU;
BIOS(8,BEZUGSLN)
END.
49
Kyan-Pascal
Ein vollcompilierendes 6502-Pascal Erfahrungsbericht von Herbert Pohl
Hinweis: Der nachfolgende Erfahrungsbe-
richt basiert noch auf den Kyan-Pascal-
Versionen 1.0 und 1.1. Die verbesserte
Version 1.2 wurde am 14.08.1985 ausge-
liefert.
Was erwarten Sie, wenn Sie das Pascal-
Programm GENAU unter UCSD-Pascal
oder Turbo-Pascal auf einem Apple Ile
laufen lassen? Unter Turbo-Pascal (V1.0
oder V2.0) wird der Rechner nach etwa
53s jammern, unter UCSD-Pascal nach
etwa 144s. Ohne Ausgabe der Rechener-
gebnisse auf dem Bildschirm sind es 1,8s
bzw. 3,5s, vom ersten Piepsen des Laut-
sprechers an gerechnet.
Unter Kyan-Pascal, Version 1.0 und 1.1,
das seit einiger Zeit für den Apple Il erhält-
lich ist, frohlockt der Rechner nach 24
bzw. 5s. Unter diesem Pascal wird also im
Gegensatz zu den beiden anderen Pascal-
Implementierungen bei den aufeinander-
folgenden Subtraktionen exakt der Wert O
erreicht.
Begründet sein muß dies darin, daß Tur-
bo- und UCSD-Pascal Real-Zahlen als
Dualzahlen darstellen, während Kyan-Pas-
cal offenbar die BCD-Darstellung benutzt.
Letzteres ist im mit dem System mitgelie-
ferten Tutorial Manual allerdings nicht do-
kumentiert, jedoch sprechen die im obigen
Programm erreichte Genauigkeit, der
durch Real-Zahlen darstellbare Zahlenbe-
reich (betragsmäßig von 1.0E-99 bis
9.999999999999E +99, 13 geltende Zif-
fern) und der zur Darstellung benötigte
Speicherplatz von acht Bytes hierfür.
1. Lieferumfang
Aufgrund einer Anzeige in der Zeitschrift
„Incider“ habe ich das Kyan-Pascal-Sy-
stem Anfang Mai in den USA bestellt und
innerhalb von vierzehn Tagen für knapp
60.00 Dollar erhalten; inzwischen beträgt
der Preis einschließlich Versand für Euro-
pa knapp 82.00 Dollar. Kyan-Pascal soll
übrigens auch für den Atari 800 XL und
den Commodore C64 erhältlich sein.
Geliefert wurden eine Pascal-System-Dis-
kette und ein Tutorial Manual, wobei die
nähere Untersuchung des Systems das
Vorhandensein einiger Fehler im Manual
zeigte. Ansonsten ist dieses Anleitungs-
buch recht geschickt aufgebaut und insbe-
sondere auch für Anfänger geeignet, so-
0
fern sie einigermaßen Englisch beherr-
schen. Die Bedienung von Editor und
Compiler wird anhand von Beispielen er-
Iäutert. Hierauf erfolgt eine kurze Einfüh-
rung in die Programmierung mit Pascal
und die Vorstellung der meisten der in
diesem System eingebauten Möglich-
keiten.
Auf der Diskette der neuesten Version 1.2
befinden sich die Dateien
PRODOS (ProDOS-System 1.1.1)
FILER (ProDOS-Kopierprogramm)
ED (Kyan-Pascal-Editor 40 Z/Z)
E80 (Kyan-Pascal-Editor 80 Z/Z)
PC (Kyan-Pascal-Compiler)
LIB (Kyan-Pascal-Library)
HELLO.SYSTEM (Startup-Programm und
zugleich Hauptmenü)
sowie Hilfsprogramme für ProDOS (z.B.
DIR für Directory-Anzeige), Include-
Dateien (für Hires-Grafik und String-Verar-
beitung) und Beispielprogramme in Text-
und Codeform. Kyan-Pascal läuft auf dem
Apple Il unter dem Betriebssystem Pro-
DOS, das ebenso wie der ProDOS-Filer
mitgeliefert wird und nur mit dem Kyan-
System zusammen benutzt werden darf.
Inzwischen habe ich (am 09.07.85) von
Kyan Software gratis (!) die Version 1.1
des Systems erhalten. Auch sonst bin ich
bislang sehr zuvorkommend bedient
worden.
Meine Untersuchungen stützen sich auf
die Version 1.0, sofern nicht anders er-
wähnt. In Tabelle 3 finden Sie die Entste-
hungsdaten wichtiger Dateien.
2. Kurzeinführung
Angenommen, man will das Programm
GENAU eingeben, compilieren und laufen
lassen. Hierzu ist die Kyan-Diskette oder
eine entsprechende Arbeitsversion in
Laufwerk 1 zu stecken und der Rechner
anzuschalten. Zunächst wird ProDOS und
dann das Hauptmenü-Programm PAS-
CAL.SYSTEM (jetzt HELLO.SYSTEM) ge-
laden, das sich auf dem Bildschirm mit
KYAN PASCAL (Version 1.X)
meldet, worauf das System auf die Einga-
be eines Kommandos wartet, die mit der
Return-Taste abzuschließen ist. Von die-
sem Hauptmenü aus kann man durch Ein-
gabe des jeweiligen Programmnamens
1. den Editor (ED oder E80)
2. den Compiler (PC) oder
3. den compilierten Objektcode (z.B. GE-
NAU.O)
starten. Danach kommt man stets in das
Hauptmenü zurück, das man jedoch durch
Eingabe eines anderen ProDOS-System-
programms (z.B. BASIC.SYSTEM) verlas-
sen kann. (Anm.d.Red.: Das Hauptmenü-
Miniprogramm PASCAL.SYSTEM, das ab
Version 1.2 HELLO.SYSTEM heißt, ist we-
gen der System-Bit-Map-Konflikte mit
ProDOS erforderlich. Beispielsweise kann
man das BASIC.SYSTEM nicht direkt aus
dem Kyan-Editor heraus, wohl aber über
das HELLO.SYSTEM starten.)
2.1. ED/E80 = Editor
ED ruft den 40-Z/Z-Editor auf, einen Bild-
schirmeditor, dessen Steuerbefehle sehr
an die des Turbo-Pascal-Editors erinnern.
Zur Steuerung des Cursors sind sowohl
die Pfeiltasten als auch TS, FD, TE und
1X möglich. Außerdem gibt es Befehle,
um den Cursor wortweise, seitenweise
und an den Anfang oder das Ende der
Datei zu bewegen. Ferner kann man ein-
zelne Zeichen oder Zeilen löschen, Text-
blöcke markieren, löschen und verschie-
ben. Weiter kennt der Editor einen mit der
ESC-Taste aufzurufenden Modus, in dem
der Text auf Diskette abgespeichert, Text
von der Diskette gelesen und eingefügt,
der Name der Datei (eigentlich der Pro-
DOS-Pfadname) geändert und die Editor-
funktionen des Suchens und Ersetzens
aufgerufen werden können. Aus diesem
Modus heraus wird der Editor auch verlas-
sen. Mittels dieses ESC-Modus ist es
ebenso möglich, Textdateien zu transfe-
rieren, indem man sie in den Editor lädt,
den Pfadnamen ändert und die Datei mit
dem neuen Pfadnamen abspeichert.
Nach seinem Aufruf fordert der Editor, der
für seine Arbeit den gesamten Speicher
von $0800 bis $BAFF benutzt, die Eingabe
eines ProDOS-Pfadnamens an. Findet er
die zugehörige Datei, wird sie eingelesen
und auf dem Bildschirm angezeigt, wobei
der Cursor am Textanfang steht. Ist die
Datei nicht zu finden, erfolgt die Meldung
„FILE NOT FOUND. PRESS ANY KEY“.
Peeker 1/86
Nach einem Tastendruck wird der Bild-
schirm gelöscht, und man kann seinen
Text eingeben. Eine Status- oder Kom-
mandozeile wie bei Turbo- oder UCSD-
Pascal gibt es nicht. Jedoch kann jederzeit
mit <ESC> ein Hilfsmenü aufgerufen
werden, ohne den eigentlichen Text zu
stören. Von diesem Hilfsmenü aus ist auch
eine Aufstellung aller Editorbefehle aufruf-
bar, was wiederum für Anfänger sehr hilf-
reich ist.
In der Version 1.0 unterstützt der Editor
keine 80-Zeichenkarte. Die eingegebene
Zeichenfolge wird beim Erreichen eines
Zeilenendes einfach in der nächsten Zeile
des Bildschirmes fortgesetzt, so daß meh-
rere Zeilen auf dem Bildschirm eine logi-
sche Zeile im Text ausmachen. Logische
Zeilen müssen durch Einfügen von <CR>
abgeschlossen werden. Mit dem Kyan-Sy-
stem der Version 1.0 geschriebene Pro-
gramme können jedoch die 80-Zeichen-
karte ohne Einschränkungen benutzen.
Mit der Version 1.1 ist nun neben dem 40-
Z/Z-Editor ED ein 80-Z/Z-Editor E80 ver-
fügbar, der auch eine Tabulator-Funktion
besitzt.
2.2. PC = Pascal-Compiler
Mit PC wird der Compiler aufgerufen, der
sich mit „PC>“ meldet und die Eingabe
des Namens des zu compilierenden
Quelltextes erwartet. Nach Tippen des
entsprechenden Pfadnamens, etwa
GENAU,
beginnt der Compiler seine Arbeit und er-
zeugt ein 6502-Maschinenprogramm, das
ebenfalls auf Diskette abgelegt wird, und
zwar unter demselben Pfadnamen wie der
Quelltext, jedoch mit einem angehängten
„.O“, also etwa „GENAU.O“. Die Compi-
lierungszeiten sind mit denen des UCSD-
Pascal vergleichbar, jedoch ist der Fort-
gang der Compilierung in der Regel nicht
auf dem Bildschirm verfolgbar.
Beim Starten des Compilers kann man
dem Pfadnamen der Pascal-Quelldatei ei-
ne oder mehrere Compileroptionen anfü-
gen, die durch Bindestriche vom Pfadna-
men und voneinander zu trennen sind.
-Ln erzeugt hierbei die Ausgabe des com-
pilierten Programmes als Assemblerdatei
über Steckplatz n,
-En lenkt die Fehlermeldungen auf Steck-
platz n um, die sonst auf dem Bildschirm
erscheinen, während
-O die Erzeugung des Objektcodes unter-
drückt. Die Angabe des Steckplatzes ei-
nes Diskettenlaufwerkes führt allerdings
zu einem Absturz des Compilers. Ich habe
herausgefunden, daß die Eingabe dieser
Optionen mit Großbuchstaben erfolgen
muß und auch eine bestimmte Reihenfol-
ge einzuhalten ist, wenn alles reibungslos
ablaufen soll. Das Tutorial Manual weist
hierauf nicht hin.
Peeker 1/86
In der Version 1.1 sind die Bezeichnungen
für die Optionen leicht geändert worden.
Auch ist jetzt Kleinschreibung und eine
beliebige Reihenfolge zulässig:
„-Sn“ wählt das Peripheriegerät an, auf
dem dann zumindest die Fehlermeldun-
gen erscheinen, „-L“ erzeugt die Ausga-
be der Assemblerdatei auf dem angewähl-
ten Peripheriegerät. Die Option „-O“ ar-
beitet wie in Version 1.0.
Mit Hilfe dieser Option ist eine reine Syn-
taxprüfung des Quelltextes möglich, die
etwas weniger Zeit beansprucht als eine
vollständige Compilierung. Da der Kyan-
Compiler nach Auftreten eines Syntaxfeh-
lers zwar die Erzeugung von Objektcode
einstellt, aber die Syntaxprüfung ohne
Pause weiter durchführt, empfiehlt es sich,
die Fehlermeldungen auf einen Drucker zu
lenken, wenn man nicht die Ausgabe mit
NS unterbrechen will. Der Compilerlauf
selbst kann übrigens jederzeit mit der Re-
set-Taste abgebrochen werden, ohne daß
die Quelldatei verlorengeht.
2.3. RUN
Nach erfolgreicher Compilierung wird das
Programm gestartet, indem man im Haupt-
menü einfach den Pfadnamen der zugehö-
rigen Objektdatei, also etwa
GENAU.O
eingibt. Diese Datei ist eine Systemdatei
im Sinne von ProDOS, so daß man sogar
„SYSTEM.PASCAL“ (jetzt HELLO.SY-
STEM) auf der Diskette durch ein eigenes
Programm auf der Diskette ersetzen könn-
te, das dann beim Bootvorgang automa-
tisch aufgerufen werden würde. Unver-
zichtbar für ein erfolgreiches Starten des
Programms ist auf jeden Fall das Vorhan-
densein der zusätzlich zum Objektcode
benötigten Runtime-Library LIB in dem-
selben Volume-Directory (Version 1.0)
bzw. in demselben Subdirectory (Version
1.1).
3. Compiler und Objektcodedatei
Beim Compilieren benötigt der Compiler
vermutlich drei Läufe, was die hierbei er-
zeugbaren Assemblerausdrucke und ein
Dump des Compilers nahelegen. Im Tuto-
rial Manual gibt es hierüber keine Hinwei-
se; ein Reference Manual liegt mir nicht
vor. Zunächst scheint der Quelltext in ei-
nen Zwischencode, der dem P-Code des
UCSD-Systems sehr ähnelt, übersetzt zu
werden. Dies bedeutet offenbar auch, daß
durch das Kyan-System auf dem 6502-
Prozessor eine Stackmaschine ähnlich der
P-Maschine simuliert wird. In einem weite-
ren Lauf wird der Zwischencode vermut-
lich in einen Assembler-Quelltext umge-
setzt. Auf jeden Fall gibt es zu jedem
Befehl des Zwischencodes im Compiler
ein entsprechendes kleines Assem-
kyan 94
blerprogramm. In einem dritten Lauf wird
dann endlich die Objektcodedatei erzeugt.
Dieses Vorgehen scheint sehr umständ-
lich zu sein und ist sicherlich für die im
Vergleich zu Turbo-Pascal langen Compi-
lierungszeiten mit verantwortlich. Aller-
dings hat Kyan Software so eine äußerst
elegante Möglichkeit verwirklicht, Maschi-
nenprogrammteile in ein Pascal-Pro-
gramm einzubinden.
3.1. Assembler und Compiler
Für die folgenden Betrachtungen soll das
Programm P3 zugrundegelegt werden,
das die 80-Zeichenkarte des Apple ein-
schaltet. Die hier eingefügte Prozedur
„Procedure pr (slot: integer);“ stammt von
der Kyan-Diskette. Anhand des Program-
mes P3 sieht man auch, daß Kyan-Pascal
die Schnittstellen zu Peripheriegeräten so
anspricht, wie es Applesoft oder der Ap-
ple-Monitor tun. Wählt man beim Compi-
lieren die Option „-L1“, hier also
P3-L1
(V1.1: P3-L-S1),
so erzeugt der Compiler die Ausgabe ei-
ner Assemblerdatei auf dem Drucker, falls
dieser wie üblich in Steckplatz 1 ange-
schlossen ist. Ein Abspeichern dieser
Datei auf Diskette ist aus den o.g. Grün-
den leider noch nicht möglich.
Eine Untersuchung der Assemblerdatei ist
trotzdem sehr lehrreich und macht das
Kyan-Pascal-System sicherlich für diejeni-
gen interessant, die Informatik unterrich-
ten und hierbei auch auf die Arbeitsweise
und den Aufbau von Compilern eingehen
wollen.
Betrachten wir nun also die Datei „P3”:
Zunächst ist hier am Quelltext zu erken-
nen, wie Kyan-Pascal Maschinenbefehle
in ein Pascal-Programm einbindet. Die
Folge der Maschinenbefehle ist mit #A zu
eröffnen und mit # abzuschließen. Diese
Steuerzeichen müssen in der äußersten
linken Spalte einer logischen Zeile im
Quelltext stehen und steuern den Compi-
ler. Sehr angenehm ist, daß das Maschi-
nenprogramm als Folge von Assembler-
Mnemonics einzugeben ist und nicht, wie
bei den Inline-Anweisungen von Turbo-
Pascal, schon als fertig assemblierter Hex-
code. Gerade durch diese Eigenschaft
könnte Kyan-Pascal zu einem Leckerbis-
sen für Freunde der Maschinensprache
werden. Das Tutorial Manual gibt an, daß
man Marken in Maschinensprachteilen
nicht mit dem Buchstaben L beginnen las-
sen soll, weil man hierdurch den Compiler
verwirrt, der bis auf einige Ausnahmen
sämtliche Marken mit L beginnen läßt und
dann durchnumeriert (L1, L2 usw.). Wei-
terhin muß in Maschinenprogrammteilen
das X-Register des Prozessors gerettet
werden, da es als Stapelzeiger in der Null-
51
Ute
seite bei der Übergabe von Daten und
Parametern bzw. Adressen von Variablen
benutzt wird. Anders als im P-System wird
hierfür nicht der CPU-Stapel verwendet.
Wenn im Hauptmenü
P3.0
eingegeben wird, so wird die Objektdatei
P3.0, also das 6502-Maschinenpro-
gramm, ab $2000 in den Speicher geladen
und gestartet. Das Programm überprüft
zunächst, ob sich in dem durch das Pro-
DOS-Präfix angegebenen Directory die
Datei LIB, also die Laufzeitbibliothek des
Pascal-Systems, befindet. Wird LIB gefun-
den, so wird versucht, sie in zwei Teilen in
den Hauptspeicher zu bringen, von $0800
bis $1IFFF einschließlich und von $B000
bis $BAFF einschließlich. Ab $BFOO be-
ginnt ProDOS. Mißlingt dies oder ist LIB
nicht vorhanden, so verzweigt das Pro-
gramm zur Marke ERROR und von dort
aus in den Apple-Monitor. Dies wird durch
den Code von $2000 bis $207F bewirkt.
Unter Version 1.1 ist für diesen Vorgang
der Code von $2000 bis $20AC verant-
wortlich, wobei lediglich LIB woanders ge-
sucht wird.
Läuft soweit alles erfolgreich, verzweigt
das Programm in die Systemroutine ab
$0800, die Startroutine. Diese nimmt zu-
nächst die Rücksprungadresse vom CPU-
Stapel, prüft anhand der ab $2082 (Ver-
sion 1.1: $20AF) abgelegten Parameter,
ob das eigentliche, in Maschinencode um-
gesetzte Pascal-Programm zu einer ande-
ren Startadresse zu verschieben ist, und
führt letzteres gegebenenfalls auch durch.
Vor einer eventuellen Verschiebung befin-
det es sich ab $208F (Version 1.1: $20B3)
im Speicher. Anschließend legt die Start-
routine eine neue Rücksprungadresse auf
den Stack und führt einen Sprung zum
Beginn des eigentlichen Hauptprogramms
durch, das mit RTS endet und sich so als
Fortsetzung der Startroutine herausstellt.
Nach dem Rücksprung aus dem Pascal-
Hauptprogramm werden in einer anderen
Systemroutine, der Schlußroutine, alle
noch offenen Dateien geschlossen und in
das Hauptmenü zurückgesprungen.
Der Kyan-Compiler setzt die von $2000
bis $208E (Version 1.1: $20B2) stehenden
Befehle vor jedes compilierte Programm
und bindet es so zwischen Start- und
Schlußroutine ein, wodurch ein ordnungs-
gemäßes Funktionieren des Systems ge-
währleistet wird. Dies bedeutet aber auch,
daß bei jedem Start eines compilierten
Pascal-Programmes die gesamte System-
bibliothek neu von der Diskette geladen
wird, was merklich Zeit kostet. Hier emp-
fiehlt es sich, eine RAM-Disk einzusetzen.
Sehr schön an den vom Compiler erzeug-
ten Assemblerdateien finde ich, daß je-
92
weils als Kommentar die aktuelle Zeile des
Pascal-Quelltextes auftritt, gefolgt von ih-
rer Umsetzung in Maschinencode. Gerade
diese Eigenschaft dürfte den Kyan-Pascal-
Compiler für jeglichen Unterricht interes-
sant machen, der sich in irgendeiner Wei-
se mit Compilerbau befaßt. Dies dürfte
auch die Arbeit sehr erleichtern, wenn
man den vom Compiler erzeugten Code
optimieren möchte, auch wenn hierzu eine
Dokumentation der Laufzeitroutinen in LIB
wünschenswert wäre. Vielleicht kann die-
se Eigenschaft auch über einige in den
Compilern der Versionen 1.0 und 1.1 noch
vorhandene Kinderkrankheiten hinwegtrö-
sten.
3.2. Labels
Der Compiler definiert einige wichtige
Marken, auf deren Bedeutung ich hier kurz
eingehen möchte. Es sind dies neben
PATHNAME und ERROR die Marken
GLOBAL, LOCAL, SP, P, T, MLI, LO, L1,
L2, L3 und LA.
- GLOBAL ($B000) kennzeichnet den er-
sten dem Benutzerprogramm nicht mehr
verfügbaren Speicherplatz und dient als
Referenzmarke für die sämtlichen Varia-
blen zuzuordnenden Speicherplätze. So
dient GLOBAL-1 ($AFFF) als Pufferspei-
cher für die Datei INPUT (Tastatur), GLO-
BAL-2 ($AFFE) als Pufferspeicher für die
Datei OUTPUT (Bildschirm), von GLO-
BAL-3 an abwärts werden die im Pro-
gramm auftretenden Variablen angelegt,
und zwar bis GLOBAL-L4 die globalen
Variablen, dann dynamisch die bei Proze-
duraufrufen erforderlichen lokalen.
- LOCAL ($0002) und SP ($0004) sind
Zeiger auf den Variablenstapel, den sie
beim Aufruf von Prozeduren mittels einer
linearen, verketteten Liste verwalten, wo-
durch unter anderem auch Rekursion or-
ganisiert wird. Mit Hilfe dieser Zeiger er-
folgt außerdem der Zugriff auf lokale und
aktuelle Parameter von Prozeduren, denn
diesen Parametern werden, anders als
den globalen, keine festen Speicherplätze
zugewiesen.
— P ($0080) ist die Startadresse für die bei
ProDOS-Aufrufen erforderlichen Parame-
ter während des Programmstarts. Ob P
sonst noch vom System benötigt wird, ist
mir noch nicht klar.
— T ($0010) dient als Zwischenspeicher
insbesondere bei der Aktivierung von Pro-
zeduren und darf offenbar auch von Ma-
schinenprogrammteilen durch den An-
wender benutzt werden.
— MLI ($BFO0) ist die Eintrittsadresse für
ProDOS-Systemaufrufe.
- LO gibt die Speicherstelle an, von der ab
unmittelbar nach dem Einlesen der Ob-
jektcodedatei der Maschinencode des ei-
gentlichen Pascal-Programms steht.
— L1 bezeichnet die Speicherstelle, an der
der Code nach einer eventuellen Ver-
schiebung beginnen sollte, sonst stimmt
L1 mit LO überein.
—-L2 gibt den niedrigsten vom Programm-
code nicht mehr belegten Speicherplatz
an. Hier beginnt also die Halde für dynami-
sche Variablen.
-L3 bezeichnet die Startadresse des Pas-
cal-Hauptprogrammes. Falls im Programm
Funktionen oder Prozeduren vereinbart
oder durch die Include-Option des Compi-
lers (#1) eingebunden werden, sind L1
und L3 verschieden voneinander.
— L4 gibt die Anzahl der von globalen
Variablen des Pascal-Programmes beleg-
ten Bytes an, wobei vom System selbst
definierte globale Variablen wie INPUT und
OUTPUT sowie nicht näher dokumentierte
globale Hilfsvariablen mitgezählt werden.
Während der Compilierung erzeugt der
Compiler weitere Marken je nach Bedarf,
die alle die Form Ln haben, wobei n die
Marken durchnumeriert. Hierdurch ist das
Verbot für den Anwender begründet, eige-
ne Marken in Maschinenprogrammteilen
mit L beginnen zu lassen.
4. Der Sprachumfang
Wie UCSD- und Turbo-Pascal kennt Kyan-
Pascal keine Funktionen und Prozeduren
als formale Parameter bei Funktionen und
Prozeduren.
Alle im Standard-Pascal verlangten Wort-
symbole sowie die Compilerdirektive
FORWARD sind vorhanden. Bei den Spe-
zialsymbolen müssen für die geschweiften
Klammern die Ersatzdarstellungen „(x“
und „x*)“ benutzt werden, ab Version 1.1
sind auch die geschweiften Klammern zu-
lässig. PACK und UNPACK fehlen wie in
UCSD-Pascal und Turbo-Pascal. Ob in je-
dem Fall automatisch gepackt wird, ist
nicht klar. Das Tutorial Manual schweigt
sich hierüber aus. Daten vom Typ ARRAY
.. OF CHAR werden jedenfalls gepackt
dargestellt.
Weiterhin fehlt wie in Turbo-Pascal die
Standardprozedur PAGE, obwohl das
Handbuch auf sie verweist; sie soll später
einmal eingebaut werden.
Soweit ich feststellen konnte, arbeiten die
Funktionen und Prozeduren zur Dateiver-
waltung ordnungsgemäß. Die nicht zum
Standard-Pascal gehörende Prozedur
CLOSE ist nicht realisiert; sie ist hier auch
unnötig, da bei jedem Aufruf von RESET
oder REWRITE eventuell betroffene offene
Dateien automatisch geschlossen werden.
Löschen von Dateien ist so nicht möglich.
Als Erweiterung ist die Prozedur SEEK
eingebaut.
Mittels der Erweiterung CHAIN läßt sich an
ein Pascal-Programm ein weiteres Pascal-
Programm oder eine andere ProDOS-Sy-
Peeker 1/86
Accelerator Ile macht
Ihren Apple II, II Plus oder Ile
dreieinhalbmal schneller.
Jetzt laufen VisiCalc”, Apple Writer, PASCAL, BASIC,
Datenbanken usw. endlich ohne langen Zeitverlust.
Stecken Sie einfach die ACCELERATOR Ile Karte
in irgendeinen Slot und beobachten Sie,
wir Ihr Apple loslegt!
ACCELERATOR Ile besitzt seinen eigenen schnellen
6502 Prozessor und 80 K-Byte Hochgeschwindigkeits-
speicher, einschließlich einer eingebauten schnellen
Sprachkarte und schnellem RAM-Speicherplatz für die
ROM-Sprache.
Direkt von Pandasoft (Titan Distributor für Deutschland)
oder bei Ihrem Applehändler.
panday®ft Dr.-Ing. Eden
Uhlandstraße 195 - 1000 Berlin 12 : Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/31 04 23 - Telex: 185 859
oO) Id ngc Druckerinterfaces für Apple II+/e/
Printer Interface c/IIl Interfaces auf dem neuesten
Stand der Technik. Kompatibel mit allen gängigen Druckern wie:
APPLE, EPSON, STAR, NEC, OKIDATA usw. Passende Treiber-
software wird über Dip-Switch ausgewählt.
Grafikfähiges Druckerinterface
Grap ple + das keine Wünsche mehr offen läßt.
Über 2 Dutzend Kommandos ermöglichen die volle Kontrolle
über alle Möglichkeiten Ihres N
Druckers. Jetzt auch mit
lle Features: Double Hires
Grafics und 80 Zeichen Dump N
mittels Druckerpuffer nachrüstbar vw
über Bufferboard. \
Cr URRERED i
ten 16 K Druckpuffer, der auf
32 oder 64 K aufrüstbar ist.
hat aber zusätzlich einen integrier-
Serielles Druckerinterface
speziell für den Apple Image-
writer.
MlorLınk
[RRAPPLER C | Be
Software-Diskette.
panday@ft Dr.-Ing. Eden
Uhlandstraße 195 - 1000 Berlin 12 - Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/31 04 23 - Telex: 185 859
Seriell-nach-Parallel-Wandler für
den IIc im Kabel integriert.
Peeker 1/86
ThunderScan."”
Ein neues optisches Lesegerät, das beliebige
Vorlagen in MacPaint überträgt: Fotos, Zeich-
nungen, Landkarten und Illustrationen werden
in den Apple-Imagewriter eingespannt und von
einem Lesekopf, der das Farbband ersetzt,
abgetastet.
Edit Scanner Tools
File
ThunderScan'“
Light_Intensity_Gauge
Long
lLLi 10)
Contrast = 110%
Brightness = +10
Quit Scan
| Pause |
Linestogo. 186
® 32 Graustufen
@ 80 Punkte/cm Auflösung
® Ubertragungsmaßstab 25 % - 400 %
® Vorlagen bis 20x25 cm
@ Nachträgliche Veränderung des Kontrasts
und der Helligkeit.
pPpanday®@ftı.... :«-
Uhlandstraße 195 - 1000 Berlin 12 : Mo-Fr 10-18 Uhr, Sa 10-13 Uhr
Telefon: 0 30/31 04 23 - Telex: 185 859
wir haben die und die
Software... Hardware...
2 RE 00
EA
und die
Zeitschriften...
wir haben die
Bücher...
mw) |
AD
"Fordern Sie unseren Gratiskatalog
ALLES FÜR DEN APPLE Il+, Ile, IIc UND MACINTOSH
panday®ft Dr.-Ing. Eden
UHLANDSTR. 195 - D- 1000 BERLIN 12
TEL.(O3O0) 310 423 -TELEX:185859
Autorisierter daroka Fachhändler MICROSOFT. Distributor
93
stemdatei anketten, wobei sich Kyan-Pas-
cal-Programm& Variablen nicht nur über
Dateien übergeben können, sondern auch
wie in Turbo-Pascal dadurch, daß die ge-
meinsamen Variablen zu Beginn aller be-
teiligten Progamme in gleicher Reihenfol-
ge und mit gleichen Datentypen lückenlos
vereinbart werden; andere Bezeichner
dürfen vorkommen.
Die Verwaltung der Halde (Heap) erfolgt
durch die Standardprozeduren NEW und
DISPOSE, die auf den ersten Blick auch
ordnungsgemäß arbeiten und auf der Hal-
de eine lineare, verkettete Liste anlegen.
NEW weist dynamischen Variablen Spei-
cherplatz auf der Halde zu, der von DIS-
POSE dem System auch korrekt zurück-
gegeben wird, jedoch wurden bei meinen
Tests in beiden zur Zeit vorliegenden Ver-
sionen des Kyan-Pascal für jede dynami-
sche Variable unabhängig vom tatsächli-
chen Bedarf 435 Bytes reserviert, weshalb
die Haldenverwaltung ernsthaften Ansprü-
chen bislang nicht genügt. Da sich mit der
Erweiterung ASSIGN (Zeiger:POINTER;
Stelle:INTEGER) Zeiger auf vom Program-
mierer definierte Speicherplätze richten
lassen, kann man sich hier mit einer eige-
nen Verwaltung der Halde behelfen, aber
dies ist nicht Sinn der Sache.
Bei Verbunden (RECORDS) darf im Ge-
gensatz zu Standard-Pascal der Bezeich-
ner im Variantenteil nicht fehlen. Ein Kon-
strukt der Form „... CASE BOOLEAN OF
TRUE: (Feldliste); FALSE: (Feldliste) ...“
ist also nicht möglich. Weiterhin werden
boolesche und selbstdefinierte skalare Se-
lektoren nicht akzeptiert, sondern nach
meinen Tests nur solche vom Typ INTE-
GER oder CHAR. Eine wesentliche Ein-
schränkung ist hierdurch allerdings nicht
gegeben. Schwerer wiegt da schon, daß
weder unter Version 1.0 noch 1.1 die
WITH-Anweisung funktioniert; der Compi-
ler stürzt hier in den Apple-Monitor ab.
GENAU
Program Genau;
{Test auf Rundungsungenauigkeiten}
var x, Y ;- real;
i : integer;
begin
x := 1;
y :=9.0l;
writeln (chr(7));
while x <> ® do
begin
x !ı=xX-yY;
write (x:20:1®);
if x <-ß.l then
repeat write (chr(7)) until false
end;
repeat write (chr(7));
for i:=1l to 1999 do {Pause}
until false
end.
54
Der Datentyp STRING ist anders als in
Turbo-Pascal und UCSD-Pascal nicht ein-
gebaut, sondern muß vom Programmierer
wie im Standard-Pascal beispielsweise als
CONST MaxString = 40;
TYPE String = ARRAY [1..MaxString] OF
CHAR;
definiert werden, jedoch arbeiten READ,
READLN, WRITE, WRITELN klaglos mit
irgendwelchen Zeichenketten, ohne eine
Laufanweisung zu verlangen.
In einigen Textdateien der System-Disket-
te stehen für die Verarbeitung des so defi-
nierten Datentyps String die Prozeduren
bzw. Funktionen LENGTH zur Bestim-
mung der Länge eines Strings, CONCAT
zur Verkettung von Strings, INDEX zum
Auffinden der Position eines Strings inner-
halb eines anderen Strings (entspricht der
POS-Funktion des UCSD-Pascal) und
SUBSTRING, um Teilstrings aus einem
String herauszuziehen (entspricht der
UCSD-Prozedur COPY) zur Verfügung.
Mit Hilfe einer weiteren Textdatei, die bei-
spielsweise durch die Include-Anweisung
des Compilers „#I HIRES.I#“ in ein Pro-
gramm eingebunden werden kann, sind
für die hochauflösende Grafik die Proze-
duren HGR zum Einschalten und Löschen
der Grafikseite 1, TX zum Einschalten der
Textseite, PLOT zum Zeichnen eines
Punktes auf der Grafikseite und DRAW
zum Zeichnen von Strecken auf der Gra-
fikseite verfügbar.
5. Laufzeiten
Bei der Bestimmung der Laufzeiten wur-
den Kyan-Pascal 1.1, UCSD-Pascal 1.2
und Turbo-Pascal 1.0 mit einer normalen
Z8OA-Karte benutzt. Die Ergebnisse fin-
den Sie in Tabelle 1. Weiterhin habe ich
einige Untersuchungen mit der Acker-
mannfunktion (siehe Programm ACKER-
ACKERMANN
MANN) durchgeführt, deren Ergebnisse
sich in Tabelle 2 finden.
Bei der Wertung sollte man jedoch noch
die jeweils erreichbare Rechengenauigkeit
berücksichtigen.
6. Fazit
Ich selbst programmiere bislang nahezu
ausschließlich in 6502-Assembler und in
Pascal. Deshalb bin ich sehr froh, endlich
ein Pascal-System für den Apple II verfüg-
bar zu haben, das Maschinencode für den
eigentlichen Prozessor des Apple erzeugt
und außerdem recht preiswert ist. Beste-
chend elegant ist außerdem die Einbin-
dung von Maschinencode in ein Pascal-
Programm, die für die recht langen Compi-
lierungszeiten entschädigen mag. Bislang
entdeckte Fehler des Systems betreffen
raffiniertere Programmiertechniken mit
Zeigern und Verbundtypen und lassen
sich mit Mitteln des Systems umgehen,
auf keinen Fall mindern sie den Wert des
Systems für Pascal-Neulinge.
Literatur
Pascal, Einführung in die Sprache, Norm-
Entwurf DIN 66256 Erläuterungen von
Klaus Däßler, M. Sommer, Springer-Ver-
lag, Berlin, Heidelberg, 1983
Turbo-Pascal von Rudolf Herschel, Olden-
bourg Verlag, München, 1985
Apple Pascal, Sprache, te-wi-Verlag, 1985
Apple Pascal, Betriebssystem, te-wi-Ver-
lag, 1985
Apple Pascal, Addendum Pascal 1.2., te-
wi-Verlag, 1985
Turbo Pascal Language Manual, Borland
International, 1984
Kyan Pascal, A Programming Language,
Tutorial Manual, 1985
Program Ackermann;
var wert, m, n : integer;
function Acker (m, n:
var a : integer;
begin
if (m<ß) or (n<ß) then
begin writeln (chr(7));
writeln ('Fehler'); readln
end;
write lt, 1,927) "J3}
if m then a := n+l
else
begin
if n=ß then a := acker (m-l,]|)
else a := acker (m-l,acker (m,n-l));
end;
acker := a
end {acker};
integer): integer;
Peeker 1/86
begin
repeat
writeln ('Es wird die Ackermannfunktion berechnet');
writeln ('Geben Sie m und n ein');
readln (m,n);
write (chr(7));
Wert := Acker (m,n);
write (chr(7));
writeln ('A(',m,',',n,') = ',wert)
until false
end.
P3
Program P3;
{89-Zeichenkarte einschalten}
{Diese Prozedur simuliert PR#s}
procedure pr (slot: integer);
begin
#+A {Anfang 6592-Assembler}
STX T
LDY #3
LDA (SP),Y
JSR $FE95
LDX T
+ {Ende 65ß2-Assembler}
end;
;‚OUTPORT
begin
pr (3);
write ('Hier muss sie sein.');
readln
end.
Tabelle 1: Laufzeiten
Operation
Kyan-Pascal
Berechnung der Wurzel
einer ganzen Zahl 11®..129
Division c := a/b 11.2
Multiplikation ganzer
Zahlen 0.790
Addition ganzer Zahlen 0.194
Mult. reeller Zahlen 4.3..4.9
Add. reeller Zahlen 1.39..1.86
Leere FOR-Schleife,
ein Durchgang 0.21
Tabelle 2: Ackermannfunktion:
Kyan-Pascal
Ackermann(3,2) 0.8 s
Ackermann(2,22) ie 3
Ackermann(2,23) in 1,5 s be-
rechnet, , Absturz
Ackermann(3,4) hängt
Ackermann(3,5) hängt
Zeiten in ns
UCSD-Pascal
UCSD-Pascal
DB 0
un un
I:
3.
3.
29.2 s
Fehler
Tabelle 3: Wichtige Entstehungsdaten
ED Version 1.® 23.04.1985 (49-Z/Z-Editor)
PC Version 1.® 14.04.1985 (Pascal-Compiler)
LIB Version 1.® 07.04.1985 (Library)
ED Version 1.1 16.06.1985
E8® Version 1.l 26.06.1985 (80-Z/Z-Editor)
PC Version l1.l 19.06.1985
LIB Version 1.1 <NO DATE>
ED Version 1.2 06.07.1985
E8® Version 1.2 06.07.1985
PC Version 1.2 27.07.1985
LIB Version 1.2 26.06.1985
Peeker 1/86
Turbo-Pascal
21..54
5.94
0.314..0.544
0.044
etwa 3.9
5..1.48 0.51..9.66
0.06
Turbo-Pascal
FH &
[UN Er o))
un
8.6
berechnet
Preiswerte Begleitdisketten
Begleitdiskette
zu „ProDOS für Aufsteiger“
Band 1
- © 6
Bd. 1: DM 28,-; Bd. 2: DM 28,—
Begleitdiskette
zu „Apple Assembler“
DM 28,—
Begleitdiskette
zu „Apple DOS 3.3"
DM 28,— (Neue Diskette für
3. Aufl.)
Hüthig Software Service
Postfach 102869 - 6900 Heidelberg
2 kyan u,
= -Yehigejalle a
Neue Preise 1
IMB-PC/XT-COMPATIBLE COMPUTER + ZUBEHÖR
Mainboard XT f. 16bit + 256K-RAM + 8 Slots, Leerkarte
Mainboard XT-640 K (on Bord) f. 16 Bit + 8 Stots Leerkarte
Disk Controller leer (f. 2x360 KB-Drives)
Disk Controller leer (f. 4 x 360KB-Drives)
Monochrome Graph. + par. Printer Leerkarte (Hercules comp.)
Color RGB + Video Graphik Leerkarte
Parallel Printer Leerkarte
512K-RAM Leerkarte
Multifunktions Leerkarte (Printer, Ser, Game Uhr gepuffert)
Disk-Muliti VO Leerkarte, (f. 3x360 K-Drive, 2xRS 232 1xpar. Printer
Int., Game/Joystick Port, Real Time Clock/Kalender gepuff.) 59,--
384 K-Multifunktions Leerkarte, (1x par. Printer Int., Game/Joystiek
Port, Real/time Clock/Kalender gepuffert) 55,-—-
Prototype/Lochraster Leerkarte, durchkontaktiert 88,--
Mainboard XT-256 f. 16 bit CPU, OK (bis 256K-an board, oder
640 K mit Addr. auf Karte aufr.) + Boot-ROM + 8 Slots best. + geprüft 359,-—
Mainboard XT-256 w.o. jedoch 256 K - vollbest. und geprüft 439,--
Mainboard XT-640 f. 16 bit CPU, OK (bis 640 K-on board aufr.) 389,--
Mainboard XT-640 w.o. jedoch 256 K-RAM best. + gepr 469,--
Mainborard XT-640 w.o. jedoch 640 K - vollbest. und geprüft 749,-—-
64KB-RAM-Chip-Aufrüstsatz (9 Stück) einzeln geprüft! 21,--
256 KB-RAM-Chip-Aufrüstung (9 Stück) einzeln geprüft 159,—
Disk-Controller gepr. (f. 2x360 KB Drives) (Extra Kabel = 39,--) 99,--
Disk Controller gepr. (f. 4 x 360 KB-Drives)(Extra Kabel = 39,--) 109,--
Monochrome Karte geprüft 235,--
Monochrome Graph. + par. Printer Karte gepr. (Hercules comp.) 315,-—
Color RGB + Video Graphikkarte gepr. 175,--
Parallel Printer-Karte gepr. o. Kabel (Extra Kabel = 49,-) 77 ,——
512K-RAM-Karte gepr. (OKB) 135,--
384K-Multifunktionskarte, RS 232, par. Printer, Interf. Game/Joystick Port,
Real Time Clock gepuff., OK + RAM-Disk/Spooler/Uhr Softw 325,--
Muiltifunktionskarte (Par. + Ser. + Uhr gepuffert) gepr. 289,--
Disk Multi /O Karte (f. 2x360 K-Drive, 2xRS$ 232, 1xpar. Printer Int.,
Game/Joystick Port, Real Time Clock/Kalender gepuff.) 397,-—-
Profi-Funktionstastatur dt. oder ASCII + 15er Block ab 215,--
135W/150W-Netzteil mit eingebautem Ventilator, Kurzschlußf. 219,--/279,-—-
360KB-Diskdrive Slimline (Track Access Time <2mS)
PC/XT - KOMPLETT-SYSTEME EINGEBAUT UND GEPRÜFT
XT-256, 16 bit-Rechner (incl. Boot-Eprom) 128K-Ram im
IBM-look-like Met.-Gehäuse + Profi-Fkt. Tast.+135 W-Netzt. gepr.
XT-256, w.o.+ Contr.+360KBDrive+Color RGB+Vid. Graphic-Karte 162
XT-256, w.o. jedoch statt Color mit Monochrome Karte
XT-256, w.o. jedoch mit Monochrome-Graphic-Printer-Karte
PC 10-Commodore 256 K+2 Laufwerke + Monitor + dt. Tast
640 K-Speichererweiterungs-Set für PC 10
APPLE-BUS COMPUTERPLATINEN + PERIPHERIE
Motherboard II 48K leer, durchkont. mit Lötstopplack
Motherboard Il w.o. jedoch 64 K leer
M-board Il 48K, gesockelt, vollbest. + gepr
Motherboard Il 64K gesockelt, vollbest.+gepr.
M-board Il 64K + Z80 CPU, gesockelt, v. best. + gepr.
M-board Ile 64K vollbestückt + gepr.
izeluKeniä (17,77 27 7.7, 0 0°7 77.77 ,9.777°77
APOLLO Il Gehäuse incl. Funkt.-Tast.
Superstarkes Netzteil — Kurzschlußfest
Leerplatine: 16K-RAM, Z80/CPU-, Controller DOS 3.3,
Parallel-Druckerkarte, Ser. Int. V24, 802/24Z-Karte, PAL-Karte je
Entwicklungslochraster-Leerplatine durchkontaktiert
16K-Speicher-Karte geprüft
APPLE orig. 16K-Language Karte gepr
Z-80 CPU-Karte geprüft
Controller DOS 3.3-Karte geprüft
Auto-Controller DOS 3.2/3.3-Karte gepr.
Erphi AFDC 2 Controller + Autopatch Softw. + Handbuch
Parallei-Drucker-Karte geprüft
Par.-Drucker-Grappler comp. Leerplatine
Par.-Drucker Karte-Grappler comp. geprüft
8bit par. Grappler-Int. + 64K-Buffer + Kabel.gepr.
Seriell-Interface-Karte V24 geprüft
Super-Seriell Leerkarte
Super-Seriell-Interface Karte gepr
80-Zeichen/24-Zeilen-Karte geprüft
802/24Z-Karte + Softswitch-Schalter Leerplatine
802/24Z-Karte + Softswitch-Schalter, gest. Scharf geprüft
802/24Z-Softwitch Karte gepr. für Ile
802/247 + 64K-Ram + Softsw. Leerkarte f. lie
80Z/24Z +64K-Ram + Softsw.-Karte best. +gepr. f. Ile
lEEE-488 Int. Karte gepr.
PAL-Modulator/Color-Karte geprüft
RGB-Color Karte gepr.
128K-Speicher-Leerkarte
128K-Speicher-Leerkarte + Software + Manual
128K-Speicher-Karte + Software geprüft +Manual
256K-Speicher Leerkarte
256K-Speicher Leerkarte-+ Software +Manual
256K-Speicher-Karte + Software geprüft +Manual
Maus incl. Software
EPROM-Burner 2716/32/64) geprüft
6522-VIA Karte geprüft
Clock Karte geprüft
Speech Karte geprüft
Wild Karte geprüft
AD/DA-8Bit Karte gepr.
Modem Euronorm-Karte gepr. + Software + Man.
UHF/TV-Modulator universell
Lüfter anclipsbar (220 V)
Dataphon s21d Akustikkoppler-FTZ mit RS 232/V24 Anschl.
APOLLO//(48K) + UHF-Mod. + Gr/Kl vollbest. + gepr. + F.-T.
POLLO//(48K) + Disk II F + Contr. + 12”-Monitor
APOLLO//A (48K) + Gr/Kl + 15er-Tastatur vollbest. + gepr. + F.-T.
POLLO//A (48K) + Disk II F + Contr. + 12”-Mon
APOLLO// ASKF (48K) vollbest. + gepr. Sep. Keyboard + Gr/Kl +
;er-Block mit Funkt.-Tasten im „IBM-look like” Gehäuse
POLLO// ASKF (48K) w.o. + Disk II F + Contr
Apollo II ASFK (48K) w.o.+2xDisk II-F+Contr. +12" Mon.
ıtpreis f.o. Systeme von 48K zu 64K
\ufpreis von 48K zu 64K +Z80 CPU
Apollo Ile (64K) PAL vollbest. und geprüft
Apollo lie (128K) +802/24Z-Karte geprüft
Apollo lle ASKF
Apollo Ile (64K) +Disk Il F+12" Monitor
APPLE lie 128K+802/24Z Karte + Softw.
Epson-Duodisk Il F-Slimline 2x143 KB mit Geh. + Kabel
Disk//+Contr. + Kabel DOS 3.3 (Siemens) im Geh.
Disk//(Siemens) im Geh. + Kabel
Disk//F + Contr. + Kab. DOS 3.3 (1/2 Höhe) im Geh.
Disk//F (1/2 Höhe) i. Geh. + Kabel (Trak Access <2 m S)
Erphi DuoDisk 1,2 MByte incl. Netzteil + Erpli; AFPC 2-Contr.
APPLESOFT + Turorial + Reference Manual eng!
APPLE-DOS 3.3 Manual engl
APPLE-DOS 3.3 Hb. dt
APPLE-Pascal Reference + Operating Manual engl
APPLE-Pascal Reference Hb. dt
APPLE-Pascal Language Hb. dt
APPLE-Fortran Manual engl
CP/M-Softcard Vol. | + Il, Manual engl
APPLE Il+Ile-Anwenderhandbuch deutsch (te-wi)
280 Karte gepr. f. APPLE//c + RAM-Disk-Software + Hb.
Macintosh System (128K)
LEETSTTGE EST TEFAL)
Macintosh Umrüstung von 128K auf 512K
SANYO MSX-Computer MPL 64 dt. Tastatur
Epson LX 80, 8 Bit/par. (Extra Traktor = 69,-)
EPSON FX 85F/T+, 8bit/parallel 160 Z/S. NLQ + IBM Komp.
EPSON FX 105+, 8bit/parallel 15” sonst w.o.
EPSON Traktoraufsatz für FX 80 + FY 85
APPLE/EPSON-Drucker Graphic-Interface + Kabel
EP SEVEN AE ET SEI RE ERTL
BROTHER-Typenraddr. HR 15XL Bbit/par. neuestes Mod
AR SG10, NLQ- + IBM-Zeichensatz, Bbit/par
Wir führen verschiedene Monitore von Zenith, Phillips und Sanyo mit Video -
TTL (IBM Komp.) oder Coloreingang.
Disketten in Box + Aufkleber I. Wahl, 10er Pack/100er Pack./ Stückpreis:
5 :'Verstärkt BASF 3M FÜJI DATA NEUTRAL
SCOTCH MAGNE-
TICS
1X, SS/SD 3,69/ 3,49 2,86/2,76
1D, SS/DD 3,89/ 3,69 4,88/ 4,58 4,27/ 3,97 3,96/3,76 2,75/2,65
2D. DS/DD 5,69/ 5,49 6,38/ 5,88 5,87/ 5,47 4,76/4,46 3,85/3,65
1D/96TPi 5,59/ 5,39 7,18/ 6,68
20/96TPi 7,09/ 6,99 7,88/ 7,48 7,87/ 7,67
2HD/1.2MB 13,49/12,69 12,87/12,57
1X. Hard 4,29/ 4,19
1X. SS/SD 4,49/ 4,39 6,68/ 6,48 6,97/ 6,67 Das
1D, SS/DD 4,79/ 4,59 8,58/ 8,28 -
2D, DS/DD 7,09/ 6,89 9,88/ 9,58 10,17/ 9,77 sind
1X, Hard 4,49/ 4,39 6,68/ 6,48 z
3 Preise!
Einseitig 10,99/ 9,99 10,08/ 9,88 7,67/ 7,47
Zweiseitig 14,99/14,29 15,98/15,18
3M-Scotch 5'/" Flüssig-Reinigungsset (2 Disk.) zweiseitig 48,95
51/4” Disketten-Archivbox für 10 Disks (1 St./10 St.) 4,75/43,50
51%” Disk-Karteikasten Kunststoff (ca. 80 Disk) 26,50
514” Disk-Karteikasten Kunststoff (ca. 80 Disk) Rauchglas 39,95
51%" Disk-K.K.Rauchglas, abschließb. (f. ca. 80-100 Disks) Lra)
2000 Bi. Tabpapier (24 cm x 12” einf.) weiß oder grün/weiß perf. 45,-—-
4000 Et.-Aufkl. doppelr. (107 x 36 mm auf 240 x 12” perf. Trägerp.) 66,50
4000 Etik.-Aufkl. einreih. (107 x 36 mm auf 125 x 12” perf. Träg.) 65,-—
OSZILLOSCOPE HAMEG ab Lager
jei Vorauszahlung frei Empfangsstation unversichert in der BRD, ausgenom-
en Papier und Etiketten, sonst N.N. + V.S. ab DM 30,-- Preise incl. MwSt
Öffnungszeiten: Mo, Di, Do, Fr v. 10-18 h, Mi u. Sa v. 10-14 h, la Sa v. 10-18 h
Telef. Best.: Mo, Di, Do, Fr von 10-19 h, Mi u. Sa wie Öffnungszeiten
GEWÄHRLEISTUNG: 6 Monate, auf alle bei uns gekauften Geräte, durch
ınsere eigene Service-Werkstatt
REPARATUREN an Apple + Compatible Geräte + Zubehör führt unser
5pezialistenteam garantiert zuverlässig + besonders kostengünstig aus
Sprechen sie mit uns. Kostenvorschlag auf Wunsch!
©
electronic ;
Telex: 07 72642 aaa-d 7b
Habsburgerstraße 134
7800 FREIBURG, Tel (0761) 276864
Bauelemente - Bausätze - uP's
Meßgerate - Zubehor - Fachlıteratur
Fachgeschäft fur Elektronik + Miıkrocomputer
Der Apple Il als
Werkzeug für den
Betriebswirt
Teil 1: Das Simplex-Verfahren
in der Controllerpraxis
Controller sind in der Regel keine As-
semblerprogrammierer. Sie bedienen
sich meist einer Hochsprache, vor-
nehmlich eines BASIC-Dialektes (z.B.
Applesoft-BASIC). Der Verfasser erläu-
tert zuerst an einem kleinen Beispiel
eine Aufgabe aus der Controllerpraxis
und zeigt dann Möglichkeiten auf, die
dem Controller die Arbeit erleichtern.
1. Aufgaben des Controllers
Die Position des Unternehmenscontrollers
hat in den letzten Jahren eine beachtliche
Aufwertung erfahren. Bei der Controller-
funktion handelt es sich „um einen Lot-
sen- oder Navigationsdienst zum Ziel Ge-
winn. Der Controller ist also ein wirtschaft-
licher Ratgeber des Managements. Seine
Aufgabe besteht in der fachlichen Inter-
pretation der Zahlen und betriebswirt-
schaftlichen Zusammenhänge sowie in
der Überzeugung und Motivation für die in
den Zahlen liegenden Konsequenzen.“
(1)
Mit dem gewachsenen Einfluß ist gleich-
zeitig eine Steigerung der Arbeitsbela-
stung verbunden. Deshalb haben sich im-
mer mehr Controller einen Personalcom-
puter angeschafft, von dem sie in erster
Linie Robustheit, einfache Handhabung,
Ausbaufähigkeit und Vielseitigkeit in der
Anwendung erwarten. Der Apple Il hat seit
seiner Markteinführung seinen außeror-
dentlich hohen Nutzwert in der Controller-
praxis unter Beweis gestellt.
Das folgende kleine Beispiel, das ich aus
(2) entnommen und aufbereitet habe, soll
dem Außenstehenden einen Einblick in
die Controllerpraxis vermitteln und den
Nutzen einer Verbindung moderner Re-
chenverfahren und Computeranwendung
für das Unternehmen verdeutlichen.
>6
2. Ein fiktives Simplex-Beispiel
Der Controller Kraus hat von der Ge-
schäftsleitung der Schmalhans GmbH,
Düsseldorf, den Auftrag erhalten, einen
Vorschlag für eine rasche Gewinnverbes-
serung auszuarbeiten.
Die Ermittlungen von Kraus ergeben, daß
die Schmalhans GmbH lediglich 4 Produk-
te (P1-P4) auf 4 Fertigungsstellen (A-D)
herstellt und verkauft. Die Situation der
letzten Periode stellt sich dar wie in Abb. 1
wiedergegeben.
Das Unternehmen erzielte somit einen
Gesamtdeckungsbeitrag in Höhe von
DM 1.354.705 in der letzten Periode. Der
Deckungsbeitrag ist die Differenz zwi-
schen Nettoumsatz und variablen Kosten
und soll die Fixkosten, die Steuern und
den erhofften Gewinn abdecken.
Bei der Datensichtung hat der Controller
Kraus herausgefunden, daß die Markt-
chancen der Schmalhans GmbH beträcht-
lich größer sind, als der Geschäftsleitung
bisher bekannt war. So halten die Verkäu-
fer folgende Absatzhöchstmengen je
Produkt für realisierbar:
Pi max. 3500 Stück,
P2 max. 9000 Stück,
P3 max. 11000 Stück,
P4 max. 2600 Stück.
In Verbindung mit den nicht voll ausgela-
steten Fertigungsstellen A-D eröffnet sich
hier ein Ausweg für die Schmalhans
GmbH.
Kraus beschließt, das deckungsbeitrags-
optimale Produktmix mittels der Sim-
plex-Methode (lineare Programmierung)
zu bestimmen. Ausgehend von den Daten
der Vorperiode und den gerade ermittelten
Absatzhöchstmengen, stellt Kraus sein
Simplex-Tableau auf und lädt sein Opti-
mierungsprogramm in den Apple Il+. Zu-
erst dimensioniert er das Feld IB (9) und
dann die Matrix A (9,13) und tippt dann die
Daten ein. Die Matrix A (9,13) weist dann
von Dipl.-Betriebswirt Willy Holtkamp
das in Abb. 2 dargestellte Bild im Speicher
auf (sinnbildlich).
Die ersten 4 Zeilen beinhalten die Koeffi-
zienten der Fertigungsstellen A-D und ge-
ben den Zeitverbrauch je Produkt in Minu-
ten an. Die Zeilen 5-8 berücksichtigen die
Absatzhöchstgrenzen je Produkt wie oben
besprochen. In der letzten Zeile sind die
Deckungsbeiträge je Produkt vermerkt.
Kurz nachdem der Controller Kraus
„RUN“ getippt hat, liegt die optimale Lö-
sung vor. Abb. 3 zeigt den Computer-
Output, während Abb. 4 die Lösung in
Tabellenform wiedergibt.
Danach sollten von P1 insgesamt 2780
Stück, von P2 insgesamt 4885 Stück, von
P3 11000 Stück und von P4 insgesamt
2315 Stück gefertigt und verkauft werden.
Dies würde den Gesamtdeckungsbeitrag
von DM 1.354.705 auf immerhin DM
1.469.808 steigern (= 8,5% Steigerung).
Aus der Tabelle ist weiterhin abzulesen,
daß die Fertigungsstellen A, B, D voll aus-
gelastet sind. Ein Vergleich der zu produ-
zierenden Mengen mit den Absatzhöchst-
grenzen zeigt, daß keine Absatzrestriktion
verletzt wurde. Bei der Datenermittlung
stellte Controller Kraus fest, daß dem spe-
ziellen Deckungsbeitrag von Produkt P1,
der später mit DM 459.895 errechnet wur-
de, ein spezieller Fixkostenbetrag in Hö-
he von DM 506.000 gegenüberzustellen
ist. Daraus resultiert ein negativer Rest-
deckungsbeitrag für das Produkt P1. Es ist
also bald aus dem Produktionsprogramm
zu nehmen. „Für die Abbaurechnung und
die Abbauentscheidung kann die ‚Sim-
plexmethode‘ wiederum wertvolle Infor-
mationen liefern“ (2b). Hierbei gilt folgen-
de Überlegung: Wenn die Summe der ent-
fallenden speziellen, d.h. langfristig ab-
baubaren Fixkosten — hier sind das DM
506.000 — höher ist als die Summe fortfal-
lender Deckungsbeiträge, dann würde die
Abbauentscheidung das Unternehmens-
ergebnis verbessern.
Peeker 1/86
Kraus stellt nun ein neues Simplex-Sche-
ma auf und läßt dabei Produkt P1 und die
Fertigungsstelle A außer acht. Das Ergeb-
nis kann aus der Abb. 5 abgelesen
werden.
Der Gesamtdeckungsbeitrag ist von DM
1.469.808 auf 1.049.942 gesunken, also
um DM 419.866. Zieht man nun von den
abbaubaren speziellen Fixkosten in Höhe
von DM 506.000 diese wegfallenden Dek-
kungsbeiträge von DM 419.866 ab, so er-
hält man die Summe DM 86.134, die die
Ergebnisverbesserung der Schmalhans
GmbH darstellt.
Dieses kleine Beispiel sollte zeigen, daß
derjenige Unternehmer im Vorteil ist, der
moderne Rechenverfahren und Computer
benutzt. Immerhin kann die Schmalhans
GmbH DM 1.469.808 - DM 1.354.705 =
DM 115.103 in einem Monat mehr verdie-
nen, ohne sich dabei groß anstrengen zu
müssen. Multipliziert man diese Zahl mit
11 Arbeitsmonaten, so erhält man eine Er-
gebnisverbesserung von DM 1.266.133.
3. Verbesserte Simplex-
Berechnungen
Im Normalfall sind die zu bearbeitenden
Matrizen beträchtlich größer als soeben
dargestellt. Mit zunehmender Matrixgröße
steigt der Rechenaufwand und damit auch
der Zeitbedarf, und zwar überproportional
zur Matrixausdehnung. So sind z.B. Mehr-
perioden-Optimierungsmodelle mit 100
Zeilen zu je 120 Spalten keine Seltenheit.
Und wenn die Frage geklärt werden muß,
welche Produkte in Werk 1 und welche
Produkte in Werk 2 am kostengünstigsten
gefertigt werden können, dann wird die
Bearbeitung noch umfangreicherer Matri-
zen notwendig.
Bei derartigen Aufgabenstellungen treten
dann schnell die konzeptionsbedingten
Nachteile des Apple II+ zutage, nämlich
lediglich 64K RAM und eine durchschnittli-
che Rechengeschwindigkeit, gemessen
an neueren Produkten der Computerindu-
strie.
Diese Feststellung bedeutet jedoch nicht
zwangsläufig, daß der Apple-Benutzer mit
seinen Problemen allein gelassen wird
und deshalb zurückstecken muß. Er sollte
die nachstehend aufgeführten Hinweise
berücksichtigen. Diese Tips lassen sich
wie folgt gruppieren:
1. Hardware-Verbesserung anschaffen
(Saturn-128K-Karte und Accelerator-
Karte);
2. Software-Unterstützung anschaffen
(Cruncher, Compiler und EMBER);
Peeker 1/86
Abb. 1
(1) (2) (3) (4) A (4) B (4) C (4) D
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min Min/St. Min
1 2599 165,43 413575 8,058 20145 9,198 278 9,121 303 90,412 1939
2 5909 67,88 339410 9,009 d 1,458 7290 1,180 5900 90,092 469
3 19009 31,62 316200 9,909 d 0,433 4330 0,374 3740 D,064 649
4 2009 142,76 285520 9,000 d 0,136 272 0,149 298 5,918 11836
(5): 19599 1354705 20145 12162 10241 13966
Kapazität: 22400 1250® 1199 16909
Schlupf: (Leerzeiten in Minuten) 2255 338 759 2034
Auslastung in %: 89,93 97,30 93,1% 87,29
(1) = Produktbezeichnung, (2) = Ist-Absatz, (3) = Deckungsbeitrag,
(4) = Fertigungsstelle, (5) = Summe
Abb. 2
2240% 8,058 9 ") Ö
ıB8B 88 88 8 o
12599 0,108 1,458 9,43 d,136 do ı8 88 8 98 od
11099 Ö,121 1,1808 9,374 8,193 9 oo ı8 8 8 od ©
16099 9,4112 9,092 GB,064 5,918 do dB ı 198 898 Ö
3599 | ® ® 1% BB 19899
9999 " N! ® ® Bee BB 8 ı9 98
11999 ® ") 1 " DB 98 98 19
2699 ® ® ® 1 ve 8 oo Oo ı
Ö 165,43 67,82 31,62 la, 8 8 8 8 8 do 9
Abb. 3
SCHMALHANS GMBH
ERMITTLUNG DER OPTIMALEN LOESUNG
NACH GERH. NIEMEYER
OPTIMUM NACH 4 DURCHLAEUFEN GEFUNDEN:
BASISVARIABLE WERT:
Hr
DOS OANSIDH
ee | | Be | Ba | En u u
I
u
a
m
oO
rm
DER GESAMTDECKUNGSBEITRAG BETRAEGT 1469488.92 DM!
Abb. 4
Optimallösung-Plan 1 (gerundet)
(1) (2) (3) (4) A (4) B (4) C (4) D
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min Min/St. Min
1 2780 165,43 459895 8,058 22401 9,198 300 9,121 336 ®,412 1145
8 4885 67,88 331604 9,P09 Ö 1,458 7122 1,180 5764 0,092 449
3 11909 31,62 347820 9,00% d 0,435 4763 0,374 4114 9,064 1704
4 2315 142,76 339489 9,009 d 0,136 315 9,149 345 5,918 13799
(5): 29989 1469898 22401 1259® 10569 15999
Kapazität: 22400 12599 11909 1609
Schlupf: (Leerzeiten in Minuten) -1 1) 759 l
Auslastung in %: 100,01 190,00 96,09 99,99
1) = Produktbezeichnung, (2) = Planabsatz, (3) = Deckungsbeitrag,
= Fertigungsstelle, (5) = Summe
praxis 94
57
3. Programme schneller machen (opti-
mieren).
3.1. Saturn- und Accelerator-Karte
Die Saturn-128K-Karte besteht aus 8 Bän-
ken mit je 16K und kann sowohl als Pseu-
do-Disk als auch im gemischten Dienst
eingesetzt werden. Das bedeutet, daß
Programmteile und/oder Felder (Arrays) in
das Extended RAM ausgelagert und bei
Bedarf wieder zurückgeholt werden kön-
nen, während die Pseudo-Disk-Funktion
nicht beeinträchtigt wird. Leider ist das
Handbuch (3) für „Applefreaks“ geschrie-
ben, so daß der Controller eine Weile be-
nötigen wird, ehe er diese vielen Möglich-
keiten richtig ausnutzen kann.
Am einfachsten ist die Anwendung der
128K-Karte in Verbindung mit Visicalc,
weil hier nur eine spezielle Disk gebootet
und einmalig angepaßt werden muß. Die
Accelerator-Karte wurde bereits im Peeker
(Heft 1/84, S. 19) beschrieben und ihre
außerordentliche Wirkung wird im Verlaufe
dieses Berichtes noch sichtbar werden.
(Redaktioneller Hinweis: Der Autor be-
nutzt einen Apple II+ mit einer Accelerator
II+; der erwähnte Testbericht bezog sich
auf die Accelerator Ile.)
3.2. EMBER-Software und Compiler
Fachleute schlagen vor, möglichst viele
Befehle in einer Zeile unterzubringen. Die-
se Aufgabe erfüllt z.B. der Dakin5-Crun-
cher (4) sehr gut. Die Bedienung ist ein-
fach: Man bootet die Dakin5-Diskette und
wählt aus einem Menü die 12 aus. Nach
ca. 10 Sekunden erscheint die in Abb. 6
wiedergegebene Anleitung auf dem Bild-
schirm.
Ich besitze sowohl den Hayden+-Compi-
ler (5) als auch den Tasc-Compiler (6).
Normalerweise benutze ich für meine Ar-
beit den Hayden+, da er noch einfacher
zu bedienen und vor allem sehr viel
schneller ist, was die Vorbereitungszeit
(Compiletime) und die Verarbeitungszeit
(Runtime) angeht.
So benötigt der Tasc-Compiler z.B. für
eine Optimierungsaufgabe des Umfangs
27 Zeilen und 47 Spalten mit einem BA-
SIC-Programm des Autors Frazer (7) ins-
gesamt 250 Sekunden Compiletime +
195 Sekunden Runtime = 445 Sekunden
Gesamtzeit bei Einsatz der Accelerator-
Karte. Der Hayden + -Compiler benötigt
dagegen nur 31 Sekunden an Compile-
time und 102 Sekunden an Runtime = 133
Sekunden Gesamtzeit. Allerdings ist das
vom Hayden+ erzeugte Binärprogramm
erheblich länger als das des Tasc-Compi-
lers.
58
I EEE
Abb. 5
Optimumlösung-Plan 2 (gerundet)
(1) (2) (3) (4) B (4) C (4) D
Stückz. DM/St. Total Min/St. Min Min/St. Min Min/St. Min
2 5073 67,88 344365 1,458 7396 1,189 5986 9,092 467
3 11999 31,62 347820 9,433 4763 9,374 4114 9,064 794
4 2506 142,76 357757 0,136 341 9,149 373 5,918 14831
(5): 18579 1049942 12590 19474 16091
Kapazität: 12599 11999 16999
Schlupf: (Leerzeiten in Minuten) 1) 526 -1
Auslastung in %: 109,00 95,21 190,01
(1) = Produktbezeichnung, (2) = Planabsatz, (3) = Deckungsbeitrag,
(4) = Fertigungsstelle, (5) = Summe
Abb. 6
*%* THE CRUNCHER %*%*
(C) 1979 BY DAKINS CORPORATION
l. LOAD THE PROGRAM TO BE COMPRESSED
2. CALL 36361 TO RUN THE CRUNCHER
3. SAVE THE COMPRESSED PROGRAM
4. CALL 36492 TO RETURN TO PROGRAMMING
AIDS 3.3 MENU
Abb. 7
Block Autor Acc. Compile Run Total
(sec) (sec) (sec)
l Niemeyer optimiert ja 25 22 47
Niemeyer ja 27 22 49
Gillett ja 27 44 =i
Bui ja 48 73 121
Frazer ja 31 192 133
Poole ja 37 73 11®
2 Niemeyer optimiert 25 59 75
Niemeyer 27 SL 78
Gillett 27 120 147
Bui 48 213 261
Frazer 31 321 352
Poole 37 206 243
3 Niemeyer optimiert Ja 61
Niemeyer ja 75
Gillett ja 206
Bui ja 385
Frazer ja 502
Poole Ja 551
4 Niemeyer optimiert 204
Niemeyer 261
Gillett 684
Bui 1298
Frazer 1798
Poole 1874
Abb. 8
Autor Block Nr. 4 Block Nr. 1 Faktor
(ohne Hilfsm.) (Acc. + Comp.)
(sec) (sec)
Niemeyer optimiert 204 47 4,34
Niemeyer 261 49 5,58
Gillett 684 Tl 9,63
Bui 1298 121 10,73
Frazer 1798 133 12,84
Poole 1874 11® 17,83
EMBER (8) steht für „Extended Memory
Interpreter“ und kann für den Apple Il, II+
und Ile verwendet werden, und zwar mit
oder ohne Language Card. EMBER kann
insgesamt 4 Megabytes verwalten. Laut
Handbuch (9) kann der Anwender Felder
(Arrays) dimensionieren, die bis zu 64K
groß sind, so daß
a) Integer-Arrays bis zu ca. 32.000 Ele-
mente,
b) Real-Arrays bis zu ca. 12.000 Elemente,
c) String-Arrays bis zu ca. 16.000 Elemen-
te umfassen dürfen.
Dabei bleibt es dem Anwender überlas-
sen, ob er die ganze 128K-Karte für EM-
BER reservieren möchte (insgesamt
166.397 Bytes Speichergröße) oder nur
bestimmte Bänke. Definiert man nur 3
Bänke und die Language Card für EMBER-
Zwecke, so stehen insgesamt 84.477
Bytes Speicherplatz zur Verfügung. Laut
Handbuch plaziert EMBER die Variablen in
das Extended RAM, während der Pro-
grammtext in die unteren 48K geschoben
wird. Die Speicherbelegung kann aus dem
Handbuch (10) entnommen werden.
Wie simpel die Benutzung von EMBER ist,
zeigt die nachstehende Beschreibung zur
Vorgehensweise:
1. Phantom-Null-Diskette (für Accelerator)
in Drive 1 einlegen und Apple einschalten.
2. Nachdem das rote Licht am Drive er-
löscht ist, „S“ tippen.
3. Nachdem das rote Licht am Drive er-
löscht ist, Phantom-Null-Diskette heraus-
nehmen und die EMBER-Kopie in Drive 1
einlegen. Dann die Leertaste drücken.
4. EMBER meldet sich mit einigen Erläute-
rungen und dem folgenden Menü:
(1) Ember set-up
(2) Install EMBER
(3) Make back-up copy
„1“ <Return> eingeben. Es erscheint das
nächste Menü:
(1) Look at Ember memory set-up
(2) Set-up EMBER memory usage
(3) Install Ember
(4) Exit
„2“ <Return> eingeben. Menü Nummer
3 erscheint mit einer Inhaltsübersicht Slot/
Bank. Darunter erfolgt eine Abfrage:
(1) Change slot contents
(2) Exit
Which option?
„1“ <Return> eingeben. Nun muß die
Frage nach dem Slot beantwortet werden.
Hier wird immer ein „O“ <Return> erfor-
derlich sein, da entweder eine Language
Peeker 1/86
Card oder ein anderes Memory Board in
Slot 0 stecken muß. Da mein Apple Il+
sowohl mit einer Language Card als auch
mit einem Saturn-128K-Board bestückt
ist, tippe ich hier eine „O“ und drücke die
Return-Taste.
Wiederum erfolgt eine Abfrage:
(1) 128K RAM card (3) 32K RAM card
(2) 64K RAM card (4) 16K RAM card
What is now in the slot?
Dabei blinkt der angesprochene Slot 0. Mit
„4“ <Return> wird in Slot O der Besitz
einer 16K-RAM-Card vermerkt. Die Frage:
„Do you want to use the entire card?“ wird
mit „Y“ <Return> beantwortet und das
Programm zeigt wieder die Abfrage:
(1) Change slot contents
(2) Exit
„1“ <Return> eingeben, wenn „Which
option?“ erscheint. Die Frage nach dem
gewünschten Slot „Which slot (8=aux)?“
wird mit „4“ <Return> beantwortet, weil
meine 128K-RAM-Karte in Slot 4 steckt.
Das bereits bekannte Menü
(1) 128K RAM card (3) 32K RAM card
(2) 64K RAM card (4) 16K RAM card
What is now in the slot?
wird mit „1“ <Return> beantwortet. Die
Frage „Do you want to use the entire
card?“ hat ihre Berechtigung. Denn wenn
man jetzt „Y“ <Return> tippt, dann wer-
den in Slot 4 alle 8 Bänke der 123K-RAM-
Card für EMBER reserviert, und es stehen
insgesamt 166.397 Bytes zur Verfügung.
Antwortet man aber mit „N“ <Return>,
wird jede einzelne Bank abgefragt und das
Ergebnis in Slot 4 vermerkt.
Das folgende Menü
(1) Change slot contents
(2) Exit
wird mit „2“ <Return> beantwortet, wo-
durch sich Drive 1 in Bewegung setzt.
Nachdem das rote Licht am Drive erlöscht
ist, steht das folgende Menü auf dem Bild-
schirm:
1) Look at Ember memory set-up
2) Set-up Ember memory usage
3) Install Ember
4) Exit
Mit „3“ <Return> wird der Installations-
prozeß abgeschlossen und die Anzeige
„Ember installed“ zeigt dies auch.
5. RUN Programmname <Return> startet
dann das eigentliche Programm.
4 PRAXIS Ez
EMBER gestattet das Anlegen einer Turn-
key-Version, so daß der eben beschriebe-
ne Vorgang sich auf das Booten der Phan-
tom-Null- und der Turnkey-Diskette be-
schränkt. Dann kann sofort das gewünsch-
te Programm gefahren werden.
EMBER zeichnet sich durch eine ausge-
sprochen einfache Bedienungsweise und
eine enorme Leistungsfähigkeit aus. So
braucht sich der Benutzer keinerlei Ge-
danken über das Bank-Switching zu ma-
chen, denn EMBER nimmt ihm derlei Ar-
beit ab.
Programme dieser Art sind Anwendern zu
empfehlen, die nicht programmieren, son-
dern den Apple Il+ als Arbeitswerkzeug
benutzen wollen.
Bei den nachfolgenden Anwendungen hat
sich herausgestellt, daß die Arbeitsge-
schwindigkeit nicht von der Anzahl der von
EMBER benutzten Bänke abhängt.
3.3. Applesoft-Verbesserung
Die unter (11) bis (16) aufgeführte Litera-
tur empfiehlt für Applesoft-Programme
u.a.:
1) Variablen anstatt Fließkomma-Konstan-
ten benutzen.
2) Soweit als möglich sollte man Werte vor
Beginn einer Schleife definieren.
3) FOR-NEXT-Schleifen sollten ohne
Schleifen-Variablennamen enden, also
statt NEXT I sollte man nur NEXT
schreiben.
4) Unterprogramme und Zieladressen von
GOTO-Befehlen sollte man an den Pro-
grammanfang verlegen.
5) Variablen sollten zu Programmanfang
initialisiert werden.
6) Zuweisungen sollte man mit dem LET-
Befehl versehen.
7) IF-THEN-Abfragen sollte man möglichst
lange „falsch“ sein lassen.
8) Möglichst kleine Zeilennummern ver-
wenden.
9) REM-Zeilen weglassen.
10) Möglichst viele Befehle in einer Zeile
unterbringen (Crunchen).
Ich habe einige dieser Vorschläge auf ihre
Wirkung bei meinem Simplex-Optimie-
rungsprogramm Niemeyer (17) überprüft,
soweit sie nicht schon berücksichtigt wa-
ren. Das Programm Niemeyer benötigt in
Verbindung mit der Accelerator-Karte 74
Sekunden für eine Matrix A (27,47). Die
Rechenzeit kann um 11 Sekunden auf
nunmehr 63 Sekunden gesenkt werden,
wenn die Vorschläge Nr. 3 und Nr. 6 bei
der Codierung berücksichtigt werden. Die
Wirkung ist in etwa 50 zu 50. Wenn man
das Weglassen des Schleifen-Variablen-
namens im optimierten Programm rück-
gängig macht, kann man genau ersehen,
59
TE [ss rrr© be en
daß das Programm nunmehr ca. 5,5 Se-
kunden (Stoppuhr) mehr benötigt.
Die vorgeschlagene Initialisierung der Va-
riablen direkt zu Programmbeginn führte
zu einer Verringerung des Ausführungs-
geschwindigkeit; benötigte der Apple bis-
her nur 63 Sekunden, so waren es jetzt auf
einmal 7/0 Sekunden. (Anm.d.Red.: Wenn
einfache Variablen nach der Dimensionie-
rung von Arrays angelegt werden, so müs-
sen alle Felder im Speicher nach oben
verschoben werden, da einfache Variablen
stets unterhalb der Felder liegen.) Auch
die Wirkung des Crunchens konnte ermit-
tet werden. Das Ausgangsprogramm
brauchte nach dem Crunchen nur noch 65
Sekunden, also immerhin eine Verbesse-
rung um 9 Sekunden. Wird das bereits
erwähnte Programm nach der Optimierung
(Vorschläge Nr. 3 und Nr. 6) gecruncht, so
zieht dies eine weitere Abnahme der Re-
chenzeit auf 61 Sekunden nach sich.
4. Geschwindigkeitsvergleiche
Als ich die erste Optimierungsaufgabe in
der Praxis lösen mußte, war kein BASIC-
Programm verfügbar. Das von mir darauf-
hin erstellte Optimierungsprogramm be-
nötigte für eine Matrix A (27,47) immerhin
2 volle Stunden. Das Warten auf die opti-
male Lösung bewog mich zu ausgedehn-
ten Suchaktionen in Universitätsbibliothe-
ken und Computershops.
Die nachfolgend unter (17) bis (21) näher
bezeichneten Simplex-Programme haben
eines gemeinsam, nämlich den Aspekt der
Anschaulichkeit, während dabei die Verar-
beitungsgeschwindigkeit in den Hinter-
grund tritt. Die Tabelle in Abb. 7 beweist,
daß erhebliche Zeitunterschiede in der
Bearbeitung einer Matrix der Größe 27
Zeilen und 47 Spalten (Standardproblem
Maximierung) zu verzeichnen sind, je
nachdem welches Simplex-Optimierungs-
programm ausgewählt wird. Weiterhin wird
die Wirkung von Compilern (hier Hay-
den+) und der Accelerator-Karte deutlich.
Vergleicht man nun die Blöcke 4 und 1
miteinander, wie in Abb. 8 geschehen,
dann kann man am Faktor die Geschwin-
digkeitsverbesserung je Programm able-
sen. Auch die Wirkung von Compiler bzw.
Accelerator-Karte kann isoliert werden.
Beträgt die MatrixgrößBe etwa 70 Zeilen
und 120 Spalten, dann genügt selbst ein
DOS-Mover nicht mehr, um den benötig-
ten Speicherplatz zur Verfügung zu stel-
len. In einem derartigen Fall wird man mit
der 128K-Karte von Saturn gute Ergebnis-
se erzielen. Am einfachsten ist die Anwen-
dung des EMBER-Programms, denn nach
dem Starten der Phantom-Null-Diskette
(wegen der Accelerator-Karte) und der be-
reits erwähnten EMBER-Turnkey-Diskette
60
stehen immerhin max. 166.397 Bytes zur
Verfügung, wobei allerdings bedacht wer-
den muß, daß EMBER Felder (Arrays) mit
max. 64K erlaubt.
Wählt man das Simplex-Programm von
Poole aus, so liegt die Lösung erst nach
ca. 17 Stunden und 57 Minuten vor. Dage-
gen benötigt der Apple unter den gleichen
Voraussetzungen mit dem Programm von
Gillett nur noch 8 Stunden und 7 Minuten.
Das normale, also nicht optimierte Nie-
meyer-Programm wirft nach 1 Stunde und
59 Minuten die optimale Lösung aus, und
das optimierte Niemeyer-Programm
braucht nur 1 Stunde und 37 Minuten un-
ter den gleichen Umständen. Würde man
beim optimierten Niemeyer-Programm auf
die Accelerator-Karte verzichten, so wür-
de man ca. 5 Stunden und 22 Minuten
warten müssen (Faktor 3,32).
5. Fazit
Dem Unternehmenscontroller steht heute
eine Reihe von Möglichkeiten offen, um
„als betriebswirtschaftlicher Begleiter für
das Management“ (22) noch effizienter
tätig werden zu können als in der Vergan-
genheit. Der Apple II+ oder Ile bietet mit
seinen Erweiterungen die Chance, wirkli-
ches „Gewinnmanagement“ (23) zu be-
treiben.
Literaturverzeichnis
(1) Deyhle, Dr. Albrecht, Controller Hand-
buch, Management Pockets 11, S. 123, 2.
überarb. u. erw. Aufl. 1980, Management
Service Verlag, Gauting/München.
(2) Schwarz, Prof. Dr. Horst, Kostenträger-
rechnung und Unternehmensführung, Ka-
pitel Bestimmung eines optimalen Produk-
tionsprogramms, S. 88-97, 2. Aufl. 1973,
Verlag Neue Wirtschafts-Briefe, Herne/
Berlin.
(2a) Ich habe die Daten übernommen und
die Tabellen der S. 88 entsprechend ange-
paßt.
(2b) Zitat von S. 96.
(3) Saturn System, Ann Arbor, USA.
(4) Dakin5 Corp., Denver, USA.
(5) Hayden’s Basic Compiler + (hier Hay-
den+-Compiler genannt), Hayden Soft-
ware, Lowell, USA.
(6) Microsoft Tasc The Applesoft Compi-
ler, Microsoft, Bellevue, USA.
(7) Frazer, Ronald J., Angewandte lineare
Programmierung, S. 69-70, Verlag Berlin
Union, Stuttgart. (Ich habe das Simplex-
Programm von Fortran in Applesoft umge-
schrieben.)
(8) EMBER 1983, Micro Solutions; 1983,
Titan Technologies.
(9) EMBER-Manual, S. 1, (von mir über-
setzt).
(10) EMBER-Manual, S. 6.
(11) Feichtinger, Herwig, Effiziente BA-
SIC-Programmierung, S. 23-24 aus Hob-
by-Computer 2, Funkschau Sonderheft
Nr. 30, 3. überarb. Aufl., Franzis Verlag,
München 1980.
(12) Applesoft Basic Programming Refe-
rence Manual, S. 120, Appendix E: Spee-
ding up your program.
(13) Bartley, David / The Apple-Dillo, Pro-
gram Optimization, A Call A.P.P.L.E. Tuto-
rial, S. 9-12, Call A.P.P.L.E., Mai 1982.
(14) Thomas, Dieter, Schnellere Basic-
Programme, MC, S. 32-33, Heft 7/1982,
Franzis Verlag, München.
(15) NN, Optimieren von Programmen.
Dem Rechner die Sporen geben, Chip,
Heft 12, 1981, Vogel Verlag, Würzburg.
(16) Wagner, Roger, Speeding in Ap-
plesoft, S. 32-33, Call A.P.P.L.E. In Depth
Number One, All About Applesoft.
(17) Niemeyer, Dr. Gerhard, Einführung in
die lineare Planungsrechnung mit ALGOL-
und FORTRAN-Programmen, Verlag Wal-
ter de Gruyter, Berlin 1968.
(18) Ich habe das „FORTRAN-Programm
für Standard-Maximum-Probleme (regulä-
re Simplex-Methode)“ auf S. 200-201 und
232-233 dargestellt, in Applesoft-BASIC
übersetzt und eine optimierte BASIC-Fas-
sung geschrieben.
(19) Gillett, Ph.D., Billy E.; Introduction to
Operations Research, S. 100-105,
McGraw-Hill, New York 1976.
(20) Bui, X.T., Kapitel 2 Lineare Program-
mierung: Die Simplex-Methode, S. 21-32
aus Planen und Entscheiden mit BASIC, 1.
Aufl. 1983 Sybex-Verlag, Düsseldorf. (Ei-
ne sehr anschauliche und besonders
empfehlenswerte Einführung in die Sim-
plex-Methode und ihre BASIC-Program-
mierung!)
(21) Poole, Lon/Borchers, Mary, Some
Common BASIC Programs, 3. Aufl., S.
103-107, Verlag Osborne/McGrawhill,
Berkeley, USA.
(22) Deyhle, Dr. Albrecht/Bösch Martin,
Arbeitshandbuch Gewinnmanagement, S.
12, Verlag Moderne Industrie 1979.
(23) ebenda, S. 13.
(24) Fa. Pandasoft, Berlin, bietet genauso
wie (25) EMBER an, EMBER kostet It.
Preisliste vom 1.7.85 DM 198, -.
(25) Fa. Weiss, Wilhelmshaven.
Hinweis zum 2. Teil
Als zweiter und abschließender Teil ist ein
Beitrag zum Thema „Matrizenrechnung in
der betriebswirtschaftlichen Praxis“ vor-
gesehen, der voraussichtlich im März-Heft
erscheinen wird.
4‘
Peeker 1/86
4hobby9g4
Grafik-Demonstrationen
Das nachfolgend abgedruckte Programm
GRAFIK.DEMOS.2 ist die Fortsetzung
von „Grafik-Demonstrationen” aus
Peeker, Heft 8/85, Seite 67. Der Zweck ist
der gleiche geblieben. Es wird dargestellt,
wie mit möglichst geringem Programmier-
aufwand möglichst effektvolle HGR-Grafi-
ken entstehen. Wesentlichster Uhnter-
schied zu Teil 1 ist, daß die Pot-Punkte in
den einzelnen Abschnitten nicht mehr di-
rekt als feste Zahlenwerte, sondern alle als
Variablen angesteuert werden. Alle Plot-
Variablen stehen am Ende des Pro-
GRAFIK.DEMOS.2
1ß0® REM Ralf Knoke
101® REM Juli 1985
1029 :
1030 REM kick Teil la aka
104® GOSUB 2659
10850 HGR2 : HCOLOR= 7:AZ = 3:02 = 32
106 IF BZ = 2 THEN AZ = 1:
1078 FOR X = 1 TO CZ
1080 HPLOT A,B TO Al,C: HPLOT D,B TO D1,C: HPLOT D,Bl TO
Dl,E: HPLOT A,Bl TO Al,E
109908 B=B - AZ::Al = Al + AZ:D1 = D1 - AZ:Bl = Bl + AZ
1108 NEXT X
111® IF BZ = 2 THEN HPLOT G,E: GOTO 269®
1120 REM kick Teil 1b ea
Peeker 1/86
HCOLOR= ®:CZ = 96
Teil 2 von Ralf Knoke
gramms. Die Variablen erscheinen sinn-
voll, da praktisch alle Werte mehrmals ver-
wendet werden. Alles übrige ist gleich ge-
blieben, ausgenommen natürlich die Grafi-
ken selbst. Dadurch entfallen diesmal
auch alle weiteren Erklärungen und es ist
nur noch viel Spaß zu wünschen!
MEER
UENEEEEN
IE SAHRR
NER ‚ll
re
>; 4 '
h
17,
GET A$
GOSUB 265%
Kurzhinweise
1. Zweck:
Demonstration effektvoller Grafiken
2. Konfiguration:
II+, Ile oder IIc;
DOS 3.3 oder ProDOS
3. Test:
RUN GRAFIK.DEMOS.2
4. Sammeldisk:
GRAFIK.DEMOS.2
(Applesoft-Programm)
FOR X = 1 TO 96:
HPLOT A,B TO Al,C: HPLOT D,B TO D1,C: HPLOT D,B TO
D1,E: HPLOT A,B TO Al,E
A=A+H 1:Al
NEXT X
=4Al+2:D=D-1:Dl=Dl-2
REM *#xxxx%xx%x%* Teil 2 Krk
GET A$
GOSUB 265%
HGR2
: HCOLOR= 7
HPLOT G2,C TO G2,E: HPLOT C,B TO F,B
FOR X = 1 TO 16
G2,C+3
HPLOT G2,C + 3 TO G + 8,B TO G2,E - 3 TO Gl - 8,B TO
C=C+6:6=G+838:E=E-6:61=G1l-38
NEXT X
61
1280
1299
1308
1319
1329
1339
1349
1359
1369
1379
1389
1399
1409
1419
1429
1430
1440
1459
1469
1470
1489
1499
1599
151®
1529
1539
1549
1559
1560
1579
1589
1599
1699
1619
162
1639
1649
1659
1669
1670
1689
1699
1709
1718
1729
1738
1749
1759
1769
177
1780
1799
1809
1819
1829
1839
1849
1859
1860
1879
1880
1890
1999
1919
192
1930
1949
1959
196
1979
1989
199
2000
2019
REM #*##kkkkK%%* Teil 3 3akakakakakakakakakk
GET A$
BZ =1
HGR2 : HCOLOR= 7:AZ = 19
GOSUB 2659
FOR X = 1 TO 29
IF BZ = 1 THEN HPLOT A,B TO G,AB TO AC,B
IF BZ = 2 THEN HPLOT G,AB TO A,B TO G,H
IF BZ = 1 THEN AB=AB + AZ
IF BZ=2 THENA=A+AZ
NEXT X
BZ = BZ + 1: IF BZ = 2 GOTO 1329
REM *###x###%#%* Teil 4 akakakakakakakakakık
GET A$
GOSUB 2659
HGR2 : HCOLOR= 7
HPLOT AE,C TO Z,C1 TO D1,Y1ı TO D1,AH TO Z,E TO AE,E TO
Al,AH TO AL,YA TO AE,C1 TO G,Y TO Z,C TO Z1,Y TO D1,Y1
TO Z1,B TO D1,AH TO Z1,AI TO Z,E TO G,AI TO AE,E TO
AG,AI TO Al,AH TO AG,B TO Al,Yı TO AG,Y TO AE,C
HPLOT G,Y TO G,AI: HPLOT Z1,Y TO AG,AI: HPLOT Z1,B TO
AE,B: HPLOT Z1,AI TO AG,Y
FOR X = 1 TO 32
HPLOT G,Y TO AE + 2,C: HPLOT Z1,Y TO Z + 2,C1l +2:
HPLOT Z1,B TO D,Y1 + 2: HPLOT Z1,AI TO D1 —- 2,AH + 2:
HPLOT G,AI TO AE + 2,E: HPLOT AG,AI TO Al + 2,AH + 2:
HPLOT AG,B TO A,Yl + 2: HPLOT AG,Y TO AF - 2,C1l + 2
AE=AE + 2:2 = 2Z + 2:Cl = Cl + 2:Yl = Yl + 2:Dl =Dl -
2:AH = AH + 2:Al = Al + 2:AF=AF-2
NEXT X
REM ##xkxKK%% Teil 5 3akakakakakakakakakık
GET A$
GOSUB 265%
HGR2 : HCOLOR= 7
HPLOT A,C TO D,C TO D,E TO A,E TO A,C TO D,E: HPLOT D,C
TO A,E
FOR X = 1 TO 23:AZ2 = 4
HPLOT A + AZ,C TO G — AZ,Bl - AZ TO Al,C1l + AZ: HPLOT D
— AZ,C TO Gl + AZ,Bl - AZ TO D1,C1 + AZ: HPLOTD - AZ,E
TO Gl + AZ,B + AZ TO DL,El - AZ: HPLOT A + AZ,E TOG -
AZ,B + AZ TO Al,El - AZ
A=AH+A2:G=G - AZ:Bl = Bl - AZ:C1l = Cl +AZ:D=D-
AZ:Gl = Gl + AZ:B=B + AZ:ElL = El - AZ
NEXT X
REM xx Teil 6 3 akakakakakakakakakk
GET A$
GOSUB 2659
HGR2 : HCOLOR= 7
FOR X = 1 TO 12:AZ2 = 3
HPLOT G,B TO R,S TO R,T TO D,B TO R,S TO R,T TO G,B TO
U,V TO G,C TO TO
A,B TO Y,S TO TO
U,Z TO
Ss=S+t
NEXT X
REM #*#xxx##%x%%* Teil 7 aakakakakakakakakakık
GET A$
GOSUB 2659
HGR2 : HCOLOR= 7:AZ = 3
HPLOT A,C TO A,B TO D,B TO D,E
FOR X = 1 TO 28
HPLOT D,B TO Al,B2 - AZ
”
’
V TO j »
‚3 T0
B
Z
U,V TO W,V TO G,B v.,T OR T8
G,B TO W,Z2 TO U,Z G,E TO W,Z TO
n<=
:T=T-AZ:U=U+rAZ:NWN =
HPLOT A,B TO D1,Bl + AZ
D=D - 7:B2 =B2 - 3:Bl =Bl +3:A=A+7
NEXT X
REM xxx Teil 8 3 akakakakakakakakakrk
GET A$
GOSUB 265®
HGR2 : HCOLOR= 7:AZ = 4
FOR X = ® TO 69
HPLOT C,C1 TO F,E TO F,Cl
IF X < 48 THEN HPLOT F1,C TO Cl,El TO Fl,El
C=tC+H+HAZ:F=F- AZ:El =El - AZ
NEXT X
REM *#*xx%k%%*%*%* Teil 9 3eakakalalakakakakr
GET A$
HGR2 : HCOLOR= 7:AZ = 4:BZ = 1:C0Z = 24
GOSUB 2659
FOR X = 1 TO CZ
HPLOT G,B TO G1,B TO G1,B1 TO G,Bl TO G,B
G=G-AZ:B=B-AZ:Gl = Gl + AZ:Bl = Bl + AZ
NEXT X
BZ =BZ +1
IF BZ = 2 THEN HCOLOR= ®: GOTO 1899
IF BZ = 3 THEN HCOLOR= 7:CZ = CZ « 2:AZ = AZ - 2: GOTO
1899
REM ka Teil 1 akakakakakakakakik
GET A$
HGR2 : HCOLOR= 7:AZ = 4:BZ = 1:02 = 1
GOSUB 2649
FOR X = 1 T0Ol
2029
2039
2040
2059
2069
2079
2089
2090
2199
2119
2129
2130
2140
2159
2169
2179
2189
2190
2209
2219
2220
2239
2240
2259
2260
2279
2280
2299
2309
2319
2320
2339
2349
2359
2369
2370
2380
2399
2400
2410
2420
2439
2449
2450
2460
2470
2480
2490
2599
2519
2529
2539
2549
2559
2569
2579
2589
2599
2609
2619
2629
2639
2649
2659
2669
2679
HPLOT G,B TO G1,B TO G1,Bl TO G,Bl TO G,B
HPLOT G2,B — 2 TO Gl + 2,B2 TO G2,Bl + 2 TO G — 2,B2 TO
G,.B-2
NEXT X
BZ =BZ2 +1
IF CZ > 23 GOTO 2119
IF BZ = 2 THEN HCOLOR= 9: GOTO 2919
IF BZ = 3 THEN HCOLOR= 7: GOTO 2®1®
IF BZ = 4 THEN BZ = 1: HCOLOR= 7:6 =G - AZ:B=B- AZ:
Gl = Gl + AZ:Bl = Bl + AZ:CZ = CZ + 1: GOTO 2019
REM ###kKk%%%* Teil 11 aaa
GET A$
HCOLOR= 7
GOSUB 265%
FOR X = ß TO 191
HPLOT C,Cı TO F,Cl
HCOLOR= ®: HPLOT C,C1 TO F,Cl
clı=cCli+l1l
HCOLOR= 7: NEXT
REM x#xxx##%%% Teil 12 sea
GET A$
GOSUB 2659
HGR2 : HCOLOR= 7:AZ = 2
FOR X = 1 TO 96
HPLOT A,C TO D,E: HPLOT D1,C1 TO Al,El
A=A+rAZ:D=D- AZ:C1l = Cl +AZ:El = El - AZ
NEXT
REM xxx %+%* Teil 13 Krk
GET A$
GOSUB 2659
HGR2 : HCOLOR= 7
FOR X = 1 TO 32
HPLOT C,C TO C1,B TO G,C
HPLOT F,C TO C1,B TO F,E
Cl = Cl + 9: NEXT
REM *#HHkHkkkk Teil 14 sera
GET A$
GOSUB 2669: HGR2
FOR X = 1 TO 16
BZ = AL - Al
HPLOT AJ,AK TO AJ — BZ,AK TO AJ — BZ,AK - BZ TO AJ,AK -
BZ TO AJ,AK TO AL,AK TO AL + BZ,AK TO AL + BZ,AK - BZ
TO AL,AK -— BZ TO AL,AK TO AL,AM TO AL + BZ,AM TO AL +
BZ,AM + BZ TO AL,AM + BZ TO AL,AM TO AJ,AM TO AJ -
BZ,AM TO AJ — BZ,AM + BZ TO AJ,AM + BZ TO AJ,AK
: HPLOT C,E TO C1,B TO G,E:
: HCOLOR= 7
AJ =AJ — 2:AK = AK — 2:AL = AL + 2:AM = AM + 2
NEXT
REM aaa Teil 15 eakeakakakakakakakk
GET A$
GOSUB 2659: HGR2 : HCOLOR= 7
HPLOT C,AN TO G,AO TO F,AN
FOR X = 1 TO 34
HPLOT C + 4,AN- 4 TO G +4,A0 +4
C=CH+HA4:AN=AN - 4:6 =G+4:M0 =AO +4
NEXT
REM x*xx###%%%* Teil 16 3akakakakakakakakık
GET A$
GOSUB 2659: HGR2 : HCOLOR= 7
HPLOT C,B TO AP,AR TO AQ,AS TO F,B TO AQ,AR TO AP,AS TO
C,B
FOR X = 1 TO 17
HPLOT C,B TO AP,AR TO G,B TO AQ,AR: HPLOT C,Bl TO AP,AS
TO G,Bl TO AQ,AS
C=C+4:AP=AP+4:B=B-A:AR=AR +4:G =G + 4:
Bl = Bl + 4:AS = AS - 4 AQ = AQ +4
NEXT
REM xxxkkkk%%* Teil 17 aakakakakakakakk
GET A$
HOME : TEXT : VTAB (19): HTAB (5): PRINT "BITTE
WAEHLEN:": PRINT :
PRINT "(2) ENDE"
PRINT : GET A$
IF A$ = "1" OR A$ = '"J" GOTO 1949
HOME : END
PRINT "(1) NOCH EINMAL?": PRINT :
REM #3 Initialisierung ***
A= 43:Al = 43:B = 95:Bl = 95:B2 = 95:B3 = 95:C = G:C1l
= :D = 235:D1 = 235:E = 191:El = 191:F = 279:F1 = 279:
G = 139:G61 = 139:G2 = 139:H = 199
R = 215:S = 69:T = 139:U = 194:V = 19:W = 174:Y = 63:Y1
= 63:2 = 171:Z1 = 171:AB = 1:AC = 234:AE = 107:AF =
107:AG = 107:AH = 127:AI = 127:AJ = 138:AK = 94:AL =
149:AM = 96:AN = 165:A0 = 26:AP = 69:AQ = 2B8:AR = 25:
AS = 165
RETURN
Zeile 2390 muß ohne Leertasten eingegeben werden,
da sie ansonsten nicht in den Eingabepuffer paßt.
Peeker 1/86
Ein neues Bildgefühl
Wenn bis zu 512 digitalisierte Fernseh-
oder Videobilder auf dem Monitor eines
Apple Il das Laufen lernen und dabei ein
Tempo von bis zu 13 Bildern pro Sekunde
erreichen, dann steckt des Rätsels Lösung
nicht in der „neuen“ Firmenpolitik des
Konzerns mit dem gestreiften Apfel auf
dem Surfsegel, sondern im Slot 7 der im-
mer noch aktuellen Wozniak-Maschine.
Für diesen Slot wurde im Berliner Inge-
nieur-Büro M. Fricke eine neue Digitalisie-
rungskarte entwickelt, die sich durch zwei
besondere Qualitäten von allen bisherigen
Karten dieser Art unterscheidet:
1. Das von der Karte empfangene Videosi-
gnal wird in 384 x 320 Bildpunkten digitali-
siert, also 16K Bildinformation, was erheb-
lich mehr ist, als sonst in der Apple-Klasse
geboten wird und jeglicher weiteren Bear-
beitung eine solide Ausgangsbasis ver-
schafft.
2. Das Video-1000-Interface unterstützt
von sich aus RAM-Karten bis 1 MByte;
eine Fähigkeit, die erstaunliche Möglich-
keiten eröffnet, wie z.B. serielle Digitalisie-
rungsvorgänge und Ganzbild-Animation.
Kabelsalat als Vorspeise
Bis die Karte allerdings ihre Vorzüge dem
Benutzer unter Beweis stellen kann, lernt
dieser erst einmal ihre Unzulänglichkeiten
kennen. Auf der kleinen, sehr sauber ver-
arbeiteten Interfaceplatine sind 3 Cinch-
Eingänge so dicht nebeneinander mon-
tiert, daß die im Videobereich üblichen
Cinch-Stecker mit Metallummantelung
nicht genügend Platz finden. In eine derart
engstirnige Raumaufteilung lassen sich le-
diglich plastikumfaßte Billigstecker in Reih
Now it’s looking at you, kid.
Peeker 1/86
4 TESTDERICHTE
Video-Clips
für
jedermann
Die Video-1000-Karte
Erfahrungsbericht von Norbert Man Brandl
und Glied bringen. Doch welche Kamera,
welcher Videorecorder verfügt zur Zeit
noch über solche zierlichen Zuführungen?
Mir ist klar, daß dem Normen-Dschungel
der Videohersteller nicht mit einfachen
Mitteln Paroli zu bieten ist, doch sollte man
dessen Existenz nicht völlig außer acht
lassen. Deswegen lautet mein Vorschlag
an die Video-1000-Entwickler: Cinch-Ein-
gänge nicht direkt auf die Platine löten,
sondern durch kurze Zuleitungen bis an
die Rückwand des Computers herausführ-
bar gestalten. Außerhalb des Computers
ist jedenfalls mehr Platz für dicke Video-
Kupplungen und Kabel.
Obwohl ich von Berufs wegen seit Jahren
mit Video arbeite und über eine beträchtli-
che Anzahl verschiedener Kabel und
Stecker verfüge, eilte ich also, mit dem
Remember Paris?
Ladenschlußgesetz als unsichtbarem Da-
moklesschwert über dem Haupt, durch die
Videoabteilungen des Fachhandels, um
mir die zierlichsten Cinch-Stecker, die auf-
findbar waren, zu besorgen.
Zwei Stunden später und fünfzig Mark är-
mer war es mir endlich gelungen, die Vi-
deo- und die Computerwelt zufriedenstel-
lend zu verbinden. Drei Kabel fanden sich
nach einigem Widerstand mit der Enge im
Inneren des Computers ab. Das eine war
über Adapter und Verlängerung mit einem
Videorecorder verbunden. Das zweite war
bereit, das Videosignal aus dem Apple auf-
zunehmen, es durch die Karte zu schleifen
und über das dritte Kabel an den Monitor
abzugeben. Dieses auf den ersten Blick
etwas umständlich wirkende Verbindungs-
system befreit von dem Zwang eines
63
zweiten Kontrollmonitors und läßt den
Computer ohne zusätzliche Schalt- oder
Umstöpselmanöver seine sonstigen An-
wendungen wie gewohnt abarbeiten.
Anm.d.Red.: Die Firma Hamaphot KG,
Monheim (Bayern), hat uns ihren neuen
640seitigen Farbkatalog „hama photo +
video. Das große Neuheitenprogramm im
Zubehör-Ratgeber 1985/86“ zugesandt,
der für eine Schutzgebühr von DM 10,-
erhältlich ist und u.a. seitenweise Cinch-
Stecker aller Art und Größe beschreibt.
Euphorie und Bilderfieber
Nach einem letzten, flüchtigen Blick auf
die zwei beidseitig mit Matrixdruck gestal-
teten DIN-A4-Blätter, die, nicht ohne den
Leser mit einigen köstlichen Tippfehlern
zu unterhalten, in knapper und sachlicher
Form über Bedienung und Möglichkeiten
der Karte Auskunft geben, bootete ich die
mitgelieferte Diskette und erlebte, wie
schnell sich anfänglicher Ärger in nachhal-
tige Zufriedenheit verwandeln kann.
Software und Karte bilden zusammen ein
verblüffend schnelles Werkzeug. Die Be-
dienungsschnittstelle ist kinderleicht zu
handhaben. Sobald die Frage nach einer
etwaigen RAM-Karte negativ beantwortet
ist, liegt das Videosignal ohne Grauwerte
sofort auf dem Monitor vor. Andernfalls
müssen Slot und Größe der RAM-Erweite-
rung dem Programm mitgeteilt werden. Mit
den Pfeiltasten ist die Helligkeit des Video-
bildes einstellbar, wodurch selbst kon-
trastarme oder schlecht ausgeleuchtete
Videovorlagen in den Griff zu bekommen
sind. Eine fest implementierte Alternative
zu dem normalen Schwarz-Weiß-Strich-
bild stellt das Punktrasterbild dar, das über
die Taste „P“ anwählbar ist. Die Rasterung
bietet eine einfache Art, Grauwerte vorzu-
täuschen. Ob nun im Raster- oder Strich-
modus, ein Druck auf die Taste „R“ digita-
lisiert das Bild und schreibt es sowohl in
das Video-1000-RAM als auch in den
Hauptspeicher des Computers, von
$4000-$7BFF. Weil demzufolge der Be-
reich der zweiten hochauflösenden Seite
belegt ist, wird ein Ausschnitt des digitali-
sierten Bildes über die erste HGR-Seite
angezeigt. Dieser Ausschnitt ist mit Hilfe
der vier Pfeiltasten (Apple II+: A = auf-
wärts, Z = abwärts) über das gesamte
16K-Bild „verschiebbar“, indem die ent-
sprechenden Bildteile in die HGR-Seite
übertragen werden. Dieser Vorgang ist
sehr schnell und macht die Wanderung
über das digitalisierte Großbild zu einer
vergnüglichen Entdeckungsreise. Besteht
der Wunsch, das ganze Bild auf einen
Blick zu sehen, kann ein Rasterbild mit
„Otrl-P“ und ein normales Strichbild mit
„Ctrl-N“ auf die Dimensionen der HGR-
Seite verkleinert werden. Sowohl die Aus-
schnitte als auch die Verkleinerungen sind
in jeweils 34-Sektoren-Binärdateien auf
Diskette speicherbar und für übliche Gra-
fik- und Drucksoftware zugänglich. Die
16K-Bilder müssen hingegen mit „Otrl-S“
und einer Nummer von 1 bis 8 auf geson-
derte Disketten geschrieben werden, die
keinen „CATALOG“ besitzen und maxi-
mal 8 ausschließlich über Nummern iden-
tifizierbare Bild-Dateien beinhalten. Die er-
ste dieser großen Binärdateien belegt
Track 3-6, die zweite Track 7-11 usw. bis
Datei Nr. 8, die sich von Track 31 bis Track
34 erstreckt. Die Geschwindigkeit, mit der
diese Jumbo-Files geschrieben und mit
„Otrl-L + Nummer“ gelesen werden, hat
mich beeindruckt.
Da weder Inhaltsverzeichnisse noch Bil-
dernamen den Benutzer durch eine
schnell wachsende Sammlung abgespei-
cherter Video-1000-Bilder lotsen, sollte
der Griff zur klassischen Kombination aus
Bleistift und Papier als Gedächtnisstütze
nicht allzuspät erfolgen. Es ist übrigens die
einzige Zettelwirtschaft, die tastaturver-
wöhnten Fingern abverlangt wird, denn
sämtliche Befehlsfolgen und Informatio-
nen über den Status praesens des Sy-
stems sind über eine Hilfsseite ein-
blendbar.
Wie nützlich die stets aktuellen Nachrich-
ten der elektronischen Help-Page sein
können, wurde mir erst bewußt, als ich
zum ersten Mal eine 512K-RAM-Karte mit
ins Video-1000-Spiel einbrachte. Der zu-
sätzliiche Speicherbereich, den man der
Digitalisierungsarbeit zur Verfügung stel-
len kann, wird nämlich vom System aus
genauso gehandhabt wie physische Dis-
ketten. Daraus ergibt sich einerseits die
Schwelle von mindesten 128K auf einer
RAM-Karte, um überhaupt für das Video-
1000-System von Interesse sein zu kKön-
nen, und andererseits die Unterteilung der
größeren RAM-Karten, die ja — wie ein-
gangs erwähnt — bis in den 1MByte-Be-
reich hinein akzeptiert werden, in jeweils
128K-Blocks. Schon in der von mir gete-
steten Konfiguration standen also 4 Blocks
für insgesamt 32 16K-Bilder zur Verfü-
gung. Bewegen sich hierbei die Wünsche
und Bedürfnisse des Anwenders auf der
voll automatisierten Arbeitsebene, die das
Video-1000-Interface bietet, braucht kein
Gedanke über Blockzuweisung und Bild-
nummer verschwendet zu werden. Mit
dem Befehl „Ctri-R“ digitalisiert die Karte
selbständig Bilderfolgen in einem Zeittakt
von 4 Bildern pro Sekunde, solange die
I stick my neck out for nobody.
64
The beginning of a beautiful friendship...
Peeker 1/86
zugewiesene Speicherkapazität ausreicht.
Das Abspielen der Bilderfolgen wird durch
den Befehl „Ctri-F“ erreicht. Beides ver-
wandelt den Apple in eine ungeahnt flinke
Bildermaschine. Sobald aber Anwendun-
gen zu bewältigen sind, die das Transferie-
ren, Abrufen oder Einsortieren einzelner
Bilder innerhalb der erweiterten Speicher-
struktur unumgänglich machen, ist es not-
wendig, eine genaue Information über den
gerade aktiven RAM-Block zu besitzen.
Ob nun das Neuausrichten der Videoka-
mera, das Suchen bestimmter Szenen auf
dem Videoband oder andere notwendige
Tätigkeiten den schnellen Arbeitsfluß, den
die Karte ermöglicht, unterbrechen und die
Konzentration ablenken — die Taste mit
dem „?“ hilft stets weiter. Ein Blick auf die
Hilfsseite bringt den aktiven Speicherblock
wieder in Erinnerung und unterstreicht die
freundliche Qualität einer Help-Page, die
ihre Aufgabe diskret und bedarfsgerecht
BEIBETSIHEISWAR eTS]alelza ar: 1ielzie)
640 Seiten, randvoll Tips
und über 1800 farbigen Abbildungen.
104.0,(0, 37.0. 2,0)
Apple DOS 3.3 —
erledigt, ohne die Arbeitsfläche eines klei-
nen 8-Bit-Systems mit Symbol-Girlanden
und Rollmenüs zu belasten.
Und wie geht’s weiter?
Bereits die Grundkonfiguration aus Inter-
face und Software liefert genügend Argu-
mente, die das Video-1000-System so-
wohl im Hobby- als auch im Profibereich
hohem Anspruch gerecht werden läßt. Voll-
ends aus dem Kreis der Mitbewerber hebt
sich das System durch seine außerordent-
lich flexiblen Ausbaumöglichkeiten hervor.
Das Ingenieur-Büro M. Fricke liefert ein
breites Spektrum von RAM-Karten, die
das beste mir bekannte Preis/Leistungs-
verhältnis auf dem deutschen Markt vor-
weisen können. Darüber hinaus sorgen
die Berliner Hersteller auch für die soft-
waremäßige Zukunft ihres Systems. Drei
} ERDFAHKO
f
| Verbindungskabel »Video«
j . wu
$ 4 £>3
7 Ihe
Pi Stecker F.-Stecke
310 :; 3
192 55 Im
Bm Mm
er en,
9.0
jr; 8 PR NOS her
4108 :4;
au
ArB 25
r
be} #
=,
Cine ec ı -Atecker
3139 :4
3112 5
235 8
ei IN
“ ud
sch ten - BNC-BIMCKe
ar15 i4
nr7
6%
IR
Sie
x,
Tips und Tricks
TESTDERICHTE 4.4
weitere Software-Pakete werden ab No-
vember 1985 die Video-1000-Möglichkei-
ten potenzieren. Es handelt sich hierbei im
einzelnen um
— ein Programm zur Digitalisierung von
Video-Standbildern in bis zu 16 Graustu-
fen und deren Ausgabe in hoher Matrix-
druckaualität,
— eine Sammlung von Hires-Utilities zur
komplexen Nachbearbeitung der digitali-
sierten Vorlagen und schließlich um
— RAM-Karten unterstützende Software,
die aus laufenden Fernseh-, Videoband-
oder Kamera-Aktionen bis zu 512 Bilder
digital umwandelt und als Computer-Clips
vorführt.
Das sensationellste an der Video-1000-
Geschichte ist jedoch der Preis. Für nur
ca. DM 300,- läßt das Video-1000-System
die hellsten Weihnachtsglöckchen erklin-
gen, und das völlig unabhängig von Kalen-
dervorschriften. ,
Video
P-Stecker - „FE Starker
was 4 Im Di 295
Sm DM 1248
3147 iu Im DRE 14,86
j
i
;
: Antennenkabel »Video«
.
Par Stecker = PAL-Buchse Tenncal
us 9 dm ; s zu 858
Antennenkupplungen
/ Ä
“ ®
i PA Stecker » PA -Bresker
I MM IE Amunnanaieune baxiaı) DM E08
: PA Buches = PAL-Buchwe
1.3891 129 Antennenbunnse (kommalı DM 300
| Verbindungskabel
ı »Viden-AV« Scart
en
Wmsssen
rag ur
me wi
ale ir TI ich Buypiattenr-
Zu Resort
un U
Die völlig überarbeitete dritte Auflage (mit neuer Begleitdiskette) erscheint Anfang 1986.
Dr. Alfred Hüthig Verlag - Postfach 10 2869 - 6900 Heidelberg
Peeker 1/86
65
The Write Choice
Ein preiswertes Textverarbeitungsprogramm
Erfahrungsbericht von Franz-Josef Hüskens
Für den Apple Il gibt es inzwischen
zahlreiche Textverarbeitungspro-
gramme. Das bekannteste dürfte
wohl „Wordstar“ sein. Mit einem
Preis von über 1000,- DM schreckt
es jedoch sicherlich viele Privat-
leute und Kleingewerbetreibende
ab.
Von der Firma Apple selbst wird
der „Applewriter“ sowie die in
„Appleworks“ integrierte Textver-
arbeitung angeboten. Die hierfür
verlangten Preise von ca. 500,-
bzw. über 800,- DM sind auch
nicht von Pappe. Voraussetzung
für die Anschaffung von derart teu-
ren Textverarbeitungs-Program-
men ist eine kommerzielle und/
oder häufige Nutzung. Für die ge-
legentliche Anwendung im Heim-
bereich oder in kleineren Betrie-
ben muß jeder Anwender für sich
selbst entscheiden, ob sich eine
derart kostspielige Anschaffung
lohnt.
Es gibt jedoch auch sehr preiswer-
te Textverarbeitungsprogramme,
die fast das gleiche leisten. Eines
dieser „billigen“ Systeme soll hier
vorgestellt werden.
Es handelt sich um The Write
Choice, vertrieben von der Firma
Roger Wagner, deren Inhaber
langjährigen Apple-Besitzern kein
Unbekannter sein dürfte: Von ihm
stammen die Programmsammlung
Apple-Doc und verschiedene an-
dere Softwarepakete. Außerdem
ist er als Buchautor hervorge-
treten.
„Write Choice“ besteht aus vier
Teilen:
— Word Processing Style Manual
(im 152seitigen Handbuch ent-
halten)
— The Analyst
— Tut’s Typer
— The Correspondent (Hauptpro-
gramm)
1. Word Processing Style
Manual
Das „Word Processing Style Ma-
nual“ ist Teil des Handbuchs und
erklärt auf ca. 50 Seiten, wie man
einen guten Stil schreibt, und gibt
Tips für Geschäftsbriefe, Manu-
skripte usw. Da das Programm aus
Amerika kommt, ist es auf die eng-
lische Sprache ausgerichtet. Man
kann damit also sein eigenes Eng-
lisch auffrischen oder als Schüler
seine Sprachkenntnisse vertiefen.
66
2. The Analyst
Der „Analyst“ ist ein Programm,
das die Lesbarkeit eines Textes
untersucht. Dazu werden im Text
verschiedene Werte, die für die
Lesbarkeit relevant sind, festge-
stellt. Das Programm scheint je-
doch nicht richtig zu arbeiten, da
es manchmal sehr seltsame Resul-
tate anzeigt. Dieser Text sollte ein-
mal aus über 20.000 Wörtern be-
stehen, dann aus etwa 19 000. Die
vermutlich (und hoffentlich) richti-
gen Werte wurden nach mehrmali-
gem Probieren angezeigt. Das
Programm ist für meine Begriffe
eine Spielerei mit wenig Nutzen.
3. Tut’s Typer
„Tut's Typer“ ist ein Hires-Grafik-
Programm, das auf unterhaltsame
Weise einen „Schreibmaschinen-
kurs“ bietet und zusätzlich durch
ein Spiel die Schreibfähigkeit trai-
niert:
a) Der erste Teil des Programms
benutzt die Hires-Grafik-Fähigkei-
ten des Apple, um die Tastatur auf
dem Bildschirm abzubilden. An-
hand dieser Grafik-Tastatur wird
die richtige Plazierung der Finger
auf den Tasten geübt und mit ver-
schiedenen Lektionen die richtige
Bewegung der Finger auf der Ta-
statur gezeigt. Nach Beendigung
jeder Lektion erhält man einen
Ausdruck über die Anzahl der feh-
lerhaften Buchstaben bzw. der fal-
schen Wörter. Gehört man bereits
zu den fortgeschrittenen Maschi-
nenschreibern, so wird dieses Pro-
gramm schnell langweilig, weil es
zu langsam ist. Schnelleres
Schreiben ist wegen der zeitrau-
benden Darstellung der Tastatur
auf dem Bildschirm unmöglich.
b) Der zweite Programmteil ist für
fortgeschrittene Schüler gedacht.
Hier kommt es auf Geschwindig-
keit an. Man findet sich als „Spie-
ler“ in den Labyrinthen der Pyrami-
de des Pharao Tut wieder. Im er-
sten Korridor des Labyrinths tau-
chen Wörter auf, die eingetippt
werden müssen. Gelingt dies
nicht, bevor ein Wort das Ende des
Korridors erreicht hat, so ver-
schwindet es wieder. Andernfalls
taucht es in einem zweiten, später
in einem dfritten Korridor auf usw.
Jedesmal muß das Wort vor sei-
nem Verschwinden eingegeben
werden. Auf den ersten Blick
scheint dies kein Problem zu sein.
Bei einem Wort! Es bleibt jedoch
nicht dabei, denn in regelmäßigen
Abständen tauchen immer mehr
Wörter auf. Nach einer gewissen
Zeit wird das „Spiel“ beendet, das
Ergebnis angezeigt und auf Disket-
te festgehalten. Mit diesem Pro-
grammteil können Wettkämpfe
zwischen bis zu 25 Teilnehmern
ausgetragen werden. Damit keine
Langeweile aufkommt, können
auch neue Lehrstücke aufgestellt
werden. In dem 12seitigen Anhang
des Handbuches wird erklärt, wie
man neue Lektionen mit dem
„Correspondent“ entwickelt.
4. The Correspondent
Der „Correspondent“ ist das
„Herz“ des Programmpakets. Es
ist das eigentliche Textverarbei-
tungsprogramm mit folgenden
Merkmalen:
Horizontales Scrollen: Der ein-
gegebene Text wird auf dem Bild-
schirm so angezeigt, wie er auch
später auf dem Papier zu sehen ist.
Das Besondere dabei ist, daß die
Anzeige sowohl mit der 80-Zei-
chenkarte als auch im 40-Z/Z-Mo-
dus möglich ist. Die maximale Zei-
lenlänge ist frei wählbar. Ohne 80-
Zeichenkarte beträgt sie 80 Zei-
chen; mit entsprechender Hard-
ware (9 80-Z/Z-Karten werden un-
terstützt) können maximal 160 Zei-
chen pro Zeile bearbeitet werden.
Mit der Videx-Ultraterm-Karte kann
eine Zeile angeblich bis zu 255
Zeichen lang sein! Ist die Zeile län-
ger, als es die Anzeigekapazität
zuläßt, wird trotzdem alles zeilen-
richtig wiedergegeben.
Der auf dem Bildschirm angezeigte
Ausschnitt bewegt sich entspre-
chend der Cursorposition in die lin-
ke bzw. rechte Hälfte des Textes.
Mit Ctrl-O kann man sich — unab-
hängig von der momentanen Cur-
sorposition — den nicht sichtbaren
Textteil ansehen. Durch eine stän-
dig eingeblendete Statuszeile
wird man über die aktuelle Position
des Cursors im Text informiert. An-
gezeigt wird die Seite, die Zeile
und die Spalte, in der sich der Cur-
sor befindet. Die Statuszeile gibt
auch Auskunft über den Modus, in
dem gerade gearbeitet wird (Edit
bzw. File-Modus). Eine Tabulator-
zeile wird am Anfang einer jeden
Seite angezeigt. In dieser Zeile
können mit Ctrl-S Tabulator-
Stopp-Punkte beliebig gesetzt
oder gelöscht werden. Ein Stern in
der Mitte der Tabulatorzeile zeigt
die tatsächliche Mitte der Textseite
an.
Eingabe-Modus: Die Texteingabe
erfolgt so, wie man es von anderen
Textverarbeitungsprogrammen her
gewohnt ist: Ein Drücken der Re-
turn-Taste ist nur am Ende eines
Absatzes nötig. Falsche Buchsta-
ben werden einfach durch Über-
schreibung berichtigt. Die Formatie-
rung des Textes erfolgt „wort-rich-
tig“ direkt auf dem Bildschirm. Das
Programm erkennt automatisch,
wenn ein Wort nicht mehr in die
laufende Zeile paßt, und springt
dann selbsttätig zum Anfang der
folgenden Zeile. Wird die Tren-
nung von Worten gewünscht, so
muß der Trennstrich von Hand ein-
gegeben werden. Der „Corre-
spondent“ erkennt ihn am Zeilen-
ende und formatiert entsprechend.
Im Editier-Modus kann der Cursor
beliebig im Text bewegt werden.
Die Tasten Ctrl-U, Ctri-H, Ctrl-J
und Ctri-K erlauben neben den
Pfeiltasten die Bewegung des Cur-
sors nach rechts, links, unten und
oben. Für die schnelle Überbrük-
kung größerer Entfernungen im
Text kann man mit Ctrl-T zum
nächsten Tabulator-Stopp sprin-
gen. Ctrl-Y bewegt den Cursor
zum nächsten Wort. Abhängig von
der zuletzt gedrückten Pfeiltaste
(rechts, links) sind diese „weiten
Sprünge“ in beide Richtungen
möglich. Mit Ctri-B springt man
zum Textanfang, mit Ctrl-E zum
Textende. Mit Ctrl-V kann man sich
die letzte durchgeführte Änderung
im Text anzeigen lassen.
Der „Correspondent“ hat folgende
Editier-Befehle: Fehlende Wörter
werden mit Ctrl-| in den bestehen-
den Text eingefügt, falsche Wörter
mit Ctrl-G gelöscht, falsche Zei-
chen mit Ctrl-R entfernt. Der letzte
Befehl dient auch zur Formatierung
des Textes. Ctrl-Z löscht den Text
einer Zeile ab der Cursorposition.
Weitere Kommandos sind: Ctri-C
zur Zentrierung einer Zeile, Ctrl-D
zur Duplizierung des zuletzt einge-
gebenen Zeichens. Mit Ctri-F kann
man Zeichenfolgen suchen und
auch austauschen lassen. Die
ESC-Taste wird bei älteren Apple-
Modellen zur Eingabe von Groß-
buchstaben benutzt. Die Eingabe
der deutschen Sonderzeichen
(äöüß) in Groß- und Kleinschrei-
bung ist bei den älteren Apple-Mo-
dellen normalerweise nicht mög-
lich. Durch ein vorangestelltes
Ctrl-A können auch diese Sonder-
zeichen eingegeben werden. Ctrl-
A ermöglicht ferner die Eingabe
von inversen (Ctrl-A |), blinkenden
(Otrl-A F) und normalen (Ctrl-A N)
Zeichen. Damit lassen sich also
auch Ctrl-Zeichen (blinkend) ein-
Peeker 1/86
0000 He ss euer
Verschiedene Drucker
geben.
werden damit steuerbar.
Die gleichen und noch weitere Be-
fehle stehen auch im File-Modus
zur Verfügung. Den File-Modus
schaltet man mit Ctrl-X (aus dem
Editier-Modus heraus) an. Die zwei
wichtigsten Befehle sind G (Get a
file = Text laden) und S (Save afile
= Text speichern). Des weiteren
ist es möglich, den Anfang und das
Ende des Textes zu setzen (Ctrl-B,
Ctrl-E). Mit Ctrl-P kann der Text
ausgedruckt werden. Steht eine
80-Zeichenkarte zur Verfügung, so
kann der Text mit der Tastenfolge
ESC Ctri-P auf dem Bildschirm
„probegedruckt“ werden. Vor dem
Ausdruck kann man die Papierlän-
ge, den linken Rand, die unterste
Zeile usw. festlegen. Das Ver-
schieben und Kopieren von Text-
blöcken ist ebenfalls möglich, fer-
ner die Eingabe normaler DOS-
Kommandos.
Weitere Merkmale des „Corre-
spondent“ sind: Eingegebener
Text kann als Binär- oder als Text-
file auf Diskette gespeichert wer-
den. Da nur fünf bzw. — bei Ver-
wendung der 64K-Karte — sieben
Seiten Text im Speicher abgelegt
werden können, gibt es die Mög-
lichkeit, verschiedene Files unter-
einander zu einem großen Text zu
verbinden. Diese Einzeltexte wer-
den nicht nur hintereinander ge-
druckt, sondern können auch mit
der Such-Routine kontinuierlich
durchsucht werden. Sogar die
Such- und Tausch-Routine arbeitet
dann richtig, so daß nach einem
Tausch erst der neue Text auf Dis-
kette gespeichert und dann der
neue File geladen wird. Das Zu-
sammenfügen verschiedener Tex-
te ist ebenso möglich wie das
Speichern von Teilen des Gesamt-
textes.
Mit dem gesondert erhältlichen
Software-Paket „The Printogra-
pher“ kann man sogar Grafik in
den Text einbinden.
Hilfe-Seiten dienen als Gedächt-
nisstütze, da man die vielen Mög-
lichkeiten, die der Correspondent
bietet, nicht alle auswendig wissen
kann. Von Hause aus wird das Pro-
gramm mit sieben Hilfe-Seiten ge-
liefert. Zusätzlich wird jedoch im
Handbuch beschrieben, wie man
selbst derartige Seiten aufstellt
und speichert.
Das mitgelieferte Handbuch er-
klärt die Benutzung anhand von
Beispielen auf 60 Seiten sehr aus-
führlich. In den verschiedenen An-
hängen wird zudem beschrieben,
Hard- und Software zum Apple lic
zusammengestellt von
Matthias Pohl
Die nachfolgenden Produkte, die
speziell für den Apple Ilc entwik-
kelt wurden, sind zum Teil noch
nicht in der Bundesrepublik erhält-
lich.
Z80-Karte
Mit der CP/M-Karte von Precision
Software erhält der Benutzer Zu-
gang zur größten Standard-Soft-
ware-Bibliothek der Welt. Zum Lie-
ferumfang gehören neben der ei-
gentlichen Karte, die den Z80-Pro-
zessor beherbergt, das CP/M-
Plus-Betriebssystem nebst Doku-
mentation. Die Hardware kann im
Rechnergehäuse installiert wer-
den; sie stört die anderen Be-
triebsarten nicht.
Maus und Joystick in einem
Kraft Systems versucht mit dem
Quickstick IIc die Vorteile der Maus
und des Joysticks zu vereinen: Mit
einem Schieberegler kann zwi-
schen beiden Betriebsarten ge-
Peeker 1/86
schaltet werden. Im Joystick-Mo-
dus kann man darüber hinaus wäh-
ien, ob der Steuerknüppel nach
Loslassen von selbst in die Mittel-
stellung zurückkehren soll (Selbst-
zentrierung) oder ob er an der letz-
ten Position verbleiben soll.
Drucker-Interface
Hotlink von Orange Micro verwan-
delt serielle in parallele Datenfor-
mate und ermöglicht so den An-
schluß der meisten Drucker. Da
die Chips auf dem Interface in
CMOS-Technik ausgeführt sind,
wird keine externe Spannungsver-
sorgung benötigt. Ein Text/Gra-
phics-Switch stellt die Kompatibili-
tät mit den verschiedenen Druk-
ker-Drivern sicher. Im Prinzip die-
selbe Funktion wie Hotlink hat
auch der Grappler C, allerdings ist
er, im Unterschied zu ersterem,
mit umfangreicher Firmware zur
Ausgabe und Aufbereitung von
Grafiken versehen: So lassen sich
Hires-Bilder invers, gedreht oder
in doppelter Größe ausdrucken.
TESTbERICHTE 4
wie man den „Correspondent“
modifizieren kann.
The Write Choice ist auf allen Ap-
ple-Il-Typen (Il+/e/c) lauffähig. Da
der Ausbau des Computers unter-
schiedlich sein kann, wird auf der
Diskette ein Programm mitgelie-
fert, mit dem man The Write Choi-
ce „personalisieren“ kann.
Auf der Diskette befindet sich eine
modifizierte Version des „Diversi-
DOS“. Dies macht sich besonders
durch das erfreulich schnelle La-
den und Speichern der Program-
me und der Binärfiles bemerkbar.
In dem Anhang des Handbuchs
werden die Möglichkeiten und
Merkmale dieses schnellen DOS
erklärt.
Fazit
Man erhält für etwa 180,- DM ein
Textverarbeitungssystem, das für
kleine bis mittlere Anwendungen
kaum Wünsche offen läßt. Das 152
Seiten starke Handbuch erklärt gut
verständlich die Benutzung der
verschiedenen Programme. Eine
mitgelieferte Referenz-Karte bietet
einen schnellen Überblick über die
zahlreichen Befehle. Die Program-
me werden auf einer beidseitig be-
spielten kopierbaren Diskette ge-
liefert und laufen unter DOS 3.3
Druckerpuffer
U-Print AP64 P hat einen 64K-fas-
senden, internen Speicher zur Puf-
ferung von zur Druckausgabe an-
stehenden Daten. Mit einem Wähl-
schalter kann die gewünschte Ko-
pienanzahl eingestellt werden, ein
zweiter Schalter dient der Spei-
cherlöschung. Das Gerät ist mit ei-
nem Centronics-Interface ausge-
stattet. Unter der Bezeichnung U-
Print AP16 ist auch ein kleinerer
Typ mit 16K-Speicher erhältlich.
Beide Geräte werden von Digital
Devices hergestellt.
Noch ein Interface
Mit ApriCord IIc von Apricorn kann
man centronics-kompatible Druk-
ker an den Apple Ilc anschließen.
Zur Spannungsversorgung der in
einem Kunststoff-Spritzguß-Ge-
häuse untergebrachten Elektronik
ist kein eigenes Netzteil erforder-
lich.
Reisekoffer
Mit dem aus Polyethylen gefertig-
ten und an den Seiten mit Alu-
bzw. Diversi-DOS. Verblüffend ist,
daß alle Programme in BASIC ge-
schrieben sind. Verschiedene zeit-
intensive Routinen liegen jedoch
als Maschinenunterprogramme
vor. Zusätzlich enthält die Diskette
noch einige Beispieltexte.
Die Ausführungsart von verschie-
denen Befehlen ist gewöhnungs-
bedürftig. So wird das Einfügen für
meine Begriffe etwas umständlich
gehandhabt. Man muß erst für die
gewünschte Anzahl von Zeilen
Platz schaffen (Ctrl-I), kann dann
Text eingeben und muß zum
Schluß ggf. die beiden Textenden
zusammenfügen (Ctrl-R). Der Ge-
wöhnung bedarf auch das automa-
tische Einfügen von zwei Leerzei-
chen im Anschluß an das Satzende
nach dem Formatierbefehl (Ctri-R).
Die Zeit für das Löschen einzelner
Zeichen wird etwas lang, da gleich-
zeitig alle Zeilen des Absatzes neu
formatiert werden. Nach dem Lö-
schen ganzer Wörter entstehen
Lücken, die erst nach der Neufor-
matierung geschloßen werden.
Nach einiger Zeit Arbeit mit dem
„Correspondent“ komme ich je-
doch zu der Ansicht, daß ich die-
ses Programm trotz der genannten
Einschränkungen in Zukunft häufig
benutzen werde.
Profilen verstärkten Koffer von Fi-
berbilt ist ein sicherer Transport
des Apple IIc möglich. Neben dem
eigentlichen Rechner finden auch
der Monitor und ein zweites Lauf-
werk Platz. Auch für Modem und
Maus sind in dem Schaumstoffein-
satz Aussparungen vorhanden.
Paralleles Drucker-Interface
Mit der Serial Box von PBl lassen
sich die Drucker von Epson, Oki-
data und C.lton an den Apple IlIc
anschließen. Alle zur Verbindung
von Drucker und Computer benö-
tigten Kabel werden mitgeliefert.
Transportkoffer
Der Transportkoffer von World Wi-
de Case soll den Apple Ilc bei
Transport und auf Reisen schüt-
zen. Jeder Koffer ist innen ausge-
schäumt und mit einem Schloß
und Außentaschen versehen.
Buchhaltung
Das Buchhaltungsprogramm Rags
to Riches von Chang Labs gibt es
67
jetzt auch für den Apple Ilc. Es
setzt sich aus den vier Modulen
Hauptbuch, Außenstände, Zahlun-
gen und Umsatz zusammen. Das
Programm benötigt 128K und nutzt
die Technik des Screen-Splitting.
Slimline-Laufwerk
Ad-3C ist ein 5,25-Zoll-Slimline-
Laufwerk, das direkt an den Apple
Ic angeschlossen werden kann.
Es wird von American Mitac herge-
stellt und ist in der Farbgebung
dem Rechner angepaßt.
Adapter
Mit Hilfe des AppleDaptor von Mi-
cro-Design kann man alle Disk
Drives, die sich am Aplle Il, II+
oder Ile betreiben lassen, auch an
den Apple Ilc anschließen.
5,25-Zoll-Laufwerk
Als zweites Laufwerk angeschlos-
sen werden kann der Micro Drive
Ampersoft
von Titan Data Systems. Er ist in
Slimline-Technologie ausgeführt
und soll kürzere Zugriffszeiten ha-
ben als die Original-Apple-Lauf-
werke. Alle zum Anschluß benötig-
ten Kabel sind Teil des Lieferum-
fangs.
Interface für Epson-Drucker
Unter Benutzung der Universal
Card von Hanzon kann man die
beiden Druckertypen Epson RX
und Epson FX an den Ilc anschlie-
Ben. Das Interface ändert die für
den Imagewriter ausgelegten Kon-
trollcodes dergestalt, das sie auch
von den Epson-Druckern „Vver-
standen“ werden.
Grafikpaket
Dazzle Draw von Broderbund Soft-
ware ist ein Programmpaket zur
Grafikerstellung. Benötigt werden
128K-Speicher und die Double Hi-
Eine Ampersand-Utility-Sammlung
Kurzbericht von
Franz-Josef Hüskens
Ampersoft ist eine Utility-Samm-
lung, die von dem holländischen
Statistik-Professor und Apple-
Kenner C. Bongers erstellt wurde
und über die Software-Abteilung
der amerikanischen Zeitschrift
„Nibble“ vertrieben wird. Ein Teil
der Utilities ist in der Nibble (z.B.
die Sortierroutine) bzw. in „Call
A.P.P.L.E.“ (z.B. der DOS-Mover)
veröffentlicht worden.
Ampersoft liegt einschließlich des
gemovten DOS 3.3 komplett in der
Bank 1 und 2 der Language-Card.
Mit Ausnahme der Matrizenrech-
nung sind alle anderen Routinen
auch durch entsprechende
Peeker-Beiträge behandelt wor-
den, auf die gesondert hingewie-
sen wird.
MicroSPARC Inc. Apple Iiiie
AMPERSOFT
UNILU RouUINeS LIDRANFU
“Major Speed Enhancements Für
TBREWINADPDIERRI FINN N
68
DOS-Mover
Erfreulich ist, daß Ampersoft nicht
nur Applesoft-BASIC erweitert,
sondern zusätzlich das DOS 3.3 in
die Language-Card schiebt und
damit in den unteren 48K ca. 10000
Bytes mehr Platz schafft. Die-
ses verschobene DOS unterschei-
det sich jedoch von dem normalen
DOS 3.3. So gibt es kein INIT-
Kommando mehr; man braucht al-
so weiterhin das Standard-DOS,
um Disketten initialisieren zu kön-
nen. Für verschiedene Programme
(COPYA, FID, MUFFIN, usw.) be-
finden sich auf der Diskette zusätz-
liche Routinen, die das jeweilige
Programm an das veränderte DOS
anpassen.
(Vgl. „DOS-Mover“ in Peeker 2/
86.)
CATALOG-Befehl
Nach einem CATALOG erhält je-
der File auf der Diskette ein zu-
sätzliches Zeichen wie -, =, / usw.
als Abkürzung. Damit kann auf den
gewünschten File zugegriffen wer-
den, ohne den vollständigen Na-
men eingeben zu müssen.
Print-Using
Mit Ampersoft erhält Applesoft-
BASIC ein schnelles Print-Using,
das keine Wünsche mehr offen
läßt. Man kann nun mit Hilfe von
Spezial-Symbolen innerhalb einer
Formatierungsmaske Zahlenkolon-
nen oder auch andere Informatio-
nen beliebig formatiert ausgeben.
Die Ausgabe ist nicht nur über
Bildschirm und Drucker, sondern
res-Grafik. Die Eingabe kann mit-
tels Apple Mouse, Koala Pad, Gra-
fik-Tablett oder Joystick erfolgen.
(s. Peeker 9/85, S. 61.)
Synthesizer
Mockingboard von Sweet Micro
Systems ist ein Synthesizer, der
sechs Musikstimmen, Halleffekte
und Sprache erzeugen kann. Zur
Ausgabe der Toneffekte hat das in
einem separaten Gehäuse unter-
gebrachte Gerät Stereolautspre-
cher.
Kontrollsystem
Mit Smartnome von CyberlLynx
kann man sämtliche elektrischen
Verbraucher zentral mit dem Apple
IIc steuern und überwachen. Der
Anschluß der Hardware erfolgt di-
rekt an die serielle Schnittstelle
des Rechners.
auch auf die Diskette möglich.
(Vgl. „Print-Using“ in Peeker 11/
85.)
Matrizenbefehle
Die sehr leistungsfähigen Matri-
zenbefehle werden Gegenstand
eines gesonderten Artikels im
Peeker sein („Matrizenrechnung
für Betriebswirte“, voraussichtlich
in Peeker 3/85).
Sortierroutine
Mit einer Sortierroutine können
ein- und zweidimensionale Felder
schnell in aufsteigender Folge sor-
tiert werden. Dabei spielt es keine
Rolle, ob es sich um Zahlen oder
Strings handelt. Für mehrere,
durch Indizierung miteinander ver-
bundenen Feldern kann der Index
entsprechend mitsortiert werden.
(Vgl. „Quicksort“ in Peeker 1/86.)
BSAVE/BLOAD von Arrays
Zahlenfelder können mit Amper-
soft als Binärdateien auf Diskette
gespeichert werden. Dies bietet
gegenüber der Ablage als Textfiles
den Vorteil, daß die Zugriffszeit
verkürzt und der auf der Diskette
benötigte Speicherplatz verringert
wird.
(Vgl. „ProDOS für Aufsteiger“, Bd.
2, S. 87.)
Löschen von Arrays
Eine weitere Utility erlaubt das se-
lektive Löschen von bereits dimen-
sionierten Feldern. Damit kann in
Applesoft-Programmen der vor-
Lichtgriffel
Der Gibson Light Pen von Koala
Technologies wird durch ein Kabel
mit dem Rechner verbunden. Zum
Lieferumfang gehören vier Pro-
gramme, die die Möglichkeiten
dieses Device ausschöpfen. Die
Programme heißen Pen Painter,
Pen Designer, Pen Animator und
Pen Musician.
Spracherzeugung
Mit dem Cricket-Synthesizer von
Street Electronics kann man so-
wohl menschlich klingende Stim-
men (männliche und weibliche) als
auch „Roboterstimmen“ erzeu-
gen. Hierzu hat das mit dem TI
5220 Sprachchip ausgestattete
Gerät eigene Lautsprecher. Des
weiteren gibt es sechs Musikkanä-
le, eine eingebaute Uhr und einen
Kopfhöreranschluß. P
handene Speicherplatz effektiver
ausgenutzt werden.
(Vgl. „Wie man Arrays löscht“ in
Peeker 2/84.)
Garbage-Collection
Die sehr langsame Garbage-Col-
lection des Applesoft-Interpreters
wird mit Ampersoft durch eine sehr
schnelle ersetzt.
(Vgl. „Müllabfuhr wie ein Blitz“ in
Peeker 1/85.)
Alle Routinen können aus Ap-
plesoft-Programmen heraus mit
einfachen &-Befehlen aufgerufen
werden. Aus diesem Grunde funk-
tionieren die Utilities nicht bei com-
pilierten Applesoft-Programmen.
Ampersoft wird auf einer kopierba-
ren Diskette geliefert. Im zugehöri-
gen Handbuch wird die Benutzung
der Utility-Sammlung anhand von
Beispielen eingehend beschrieben
und erklärt. Die einzelnen Utilities
erweitern das etwas karge Ap-
plesoft-BASIC zwar um einige
wichtige Befehle, jedoch ist der
Preis von etwa 200,- DM für meine
Begriffe überhöht. Es gibt Pro-
gramme, die gleiches oder ähnli-
ches leisten, aber erheblich preis-
werter sind. Der Vorteil liegt in der
Bündelung, falls man alle Amper-
sand-Routinen gleichzeitig benö-
tigt, weil man sich sonst einzelne
Routinen (aus dem Peeker usw.)
erst zusammenstellen müßte.
4
Peeker 1/86
Buchbesprechungen
Was ist wo im Apple
1985, 496 S., zahlr. Tabellen und
Abb., kart.
von Wiliam F. Luebbert
Sybex-Verlag, Düsseldorf
Dieses Buch ist eine gelungene
Übersetzung des schon fast legen-
dären „What’s Where in the Ap-
ple“, das in den Anfängen des Ap-
ple eine der meistzitierten Quellen
war und nun auch für den Ile auf
den neusten Stand gebracht
wurde.
Es bietet sowohl für Assembler-
als auch für gehobene Applesoft-
Programmierer eine Fülle von Tips
und Informationen, von der Bele-
gung der Zero-Page über die Or-
ganisation des Bildschirms bis hin
zur Beschreibung von DOS, Ap-
plesoft-Interpreter und Monitor.
Der numerische und alphabetische
Atlas (über 140 Seiten) faßt alle
Speicherstellen und Routinen zu-
sammen und beschreibt kurz de-
ren Anwendung. Die Fülle an In-
formationen über DOS, beide BA-
SIC-Interpreter und II+/lle-Moni-
tor ermöglicht eine effiziente Aus-
nutzung des Apple, wobei die hier
angegebenen Label-Namen quasi
zum Standard wurden.
Das Buch bietet selbst dem erfah-
renen Apple-Programmierer noch
neue Möglichkeiten und kann auch
später im täglichen Gebrauch als
nützliches Nachschlagewerk
dienen.
Inhalt
Systemspezifische Programmie-
rung — PEEK, POKE und CALL -—
Apple-Architektur — Adressierung
beim 6502 — Maschinenprogram-
me in BASIC-Umgebung — Die
Speicherorganisation — Monitor-
und DOS-Vektoren — Bildschirm-
speicher — Benutzerspeicher —
Das Diskettenbetriebssystem DOS
—- Der E/A-Bereich — Der Ap-
plesoft-BASIC-Interpreter — Der
Monitor-Bereich — Atlas
Apple-Assembler lernen
Bd. 1, Einführung in die Assem-
bler-Programmierung des 6502/
65002
von Jürgen Kehrel
1985, 234 S., zahlr. Abb., kart., DM
38,-
Hüthig Verlag, Heidelberg
Dieses Buch bietet in 35 Lektionen
einen bequemen Einstieg in die
Assembler-Programmierung auf
dem Apple. Ausgehend von Ap-
plesoft-BASIC werden kleine Ma-
schinenprogramme entwickelt,
wobei besonderer Wert auf eine
didaktische Einführung in die Pro-
grammierung mit einem Assem-
bler gelegt wurde.
Peeker 1/86
In jedem Fall empfehlenswert ist
der Kauf der Begleitdiskette (Preis:
DM 44,-), die neben allen in dem
Buch gezeigten Programmen auch
einen „ausgewachsenen“ Assem-
bler mit Editor bietet, der trotz der
fehlenden Makro-Eigenschaft
durchaus mit professionellen As-
semblern konkurrieren kann und
weit über die Anfänge der Pro-
grammierung in Maschinenspra-
che alle Wünsche abdeckt. Ein be-
sonders für Anfänger fast unaus-
weichliches Hilfsmittel ist der
ebenfalls auf der Begleitdiskette
enthaltene Debugger IDUS, der es
ermöglicht, die selbstgeschriebe-
nen Programme schrittweise zu
verfolgen und die Änderung von
Speicherstellen, Registern und
Flaggen zu beobachten.
Vor der Besprechung der Befehle
erfolgt eine leichtverständliche
Einführung in die Welt der Bits und
Bytes. Bei den Programmen wurde
versucht, Probleme der täglichen
Assembler-Praxis aufzugreifen, so
daß nicht unnütze Probleme be-
sprochen werden, sondern schon
einmal eine verständliche aber
professionelle Routine angeboten
wird.
Die für Anfänger zunächst un-
durchschaubaren Adressierungs-
arten des 6502 werden nicht ne-
benbei beschrieben, sondern am
Ende der Einführung mit instrukti-
ven Abbildungen veranschaulicht,
ein Weg, den jeder Assembler-
Kurs beschreiten sollte. Eine um-
fangreiche Zusammenfassung des
kompletten Befehlssatzes mit Bei-
spielen für den täglichen Gebrauch
und verschiedene Tabellen runden
den ersten Band ab.
Inhalt
Assembler-Kurs in 35 Lektionen —
Der 6502/65C02 Befehlssatz —
Der Assembler ASSESSOR — Der
Debugger und Simulator IDUS —
Anhang
ProDOS-Analyse
Versionen 1.0.1, 1.0.2, 1.1.1
von Arne Schäpers
1985, 470 S., kart., DM 68,-
Hüthig Verlag, Heidelberg
Mit der ProDOS-Analyse erhält der
Leser eine umfassende Darstel-
lung der kompletten ProDOS-In-
terna, ohne das BASIC.SYSTEM.
Da sowohl die Versionen 1.0.1 als
auch die geänderten Versionen
1.0.2 und 1.1.1 beschrieben wer-
den, kann der mit Assembler ver-
traute Anwender (und nur für diese
Gruppe ist dieses Buch geeignet)
sein Betriebssystem modifizieren
und patchen oder auch nur ergrün-
den. Die kommentierten Assem-
blerlistings aller Teile (MLI mit
RWTB, Boot-Programm, RAM-
Disk etc.) geben einen tiefgreifen-
den Einblick in die Arbeitsweise
des Betriebssystems. Dabei wird
jeweils vorher die genaue Funktion
der einzelnen Komponenten be-
schrieben, so daß nach der Lektü-
re dieses Buches kaum noch Fra-
gen zu dem Betriebssystem offen
bleiben dürften.
Mit der ProDOS-Analyse hat der
Autor selbst das Technical Refe-
rence Manual der Firma Apple
übertroffen und die wohl umfang-
reichste theoretische Darstellung
eines Betriebssystems geschaf-
fen, die je auf dem freien Markt
erhältlich war.
Das MLI — Dateistrukturen unter
ProDOS — Programmiertricks im
MLI -— BOOT und REBOOT von
ProDOS — Die Verarbeitung von
NMI, RESET und IRQ — SET TIME
für die Thunderclock — Die System
Global Page - Die RWTB der DISK
II - Die Organisation einer Diskette
— Hardware Details — Die RAMDisk
— Updates von ProDOS — Anhänge
Bewegte Apple-Grafik
DOS Toolkit-Erweiterungen
von Arne Schäpers
1985, 308 S., kart., DM 58,-
Hüthig Verlag, Heidelberg
Die DOS Toolkit-Diskette enthält
neben dem Assembler auch ein
interessantes Programm zur Dar-
stellung von Objekten auf dem
HGR-Bildschirm des Apple. Dieser
Hires Character Generator ist Ge-
genstand dieses Buches, das den
fortgeschrittenen Applesoft-Pro-
grammierer mit Assemblerkennt-
nissen in die Welt der bewegten
Grafik einführt. Im ersten Teil des
Buches wird zunächst der HRCG
analysiert und dessen Möglichkei-
ten aufgezeigt. Daran schließt sich
ein kommentiertes Assemblerli-
sting an.
Im zweiten Teil wird ein professio-
nelles Arkade-Spiel entwickelt, bei
dem der Leser unter anderem
lernt, wie simultane Bewegungen
mehrerer Objekte gleichzeitig rea-
lisierbar sind. Dabei wird auch auf
die Steuerung mit Joysticks und
Paddles eingegangen. Dieser Blick
hinter die Kulissen der Program-
mierung von Computerspielen bie-
tet die Möglichkeit, eigene Ideen
umzusetzen und Spiele zu pro-
grammieren, die in nichts den pro-
fessionellen Angeboten nachste-
hen müssen.
Inhalt
Der HRCG - Line-Skewing —
Transparente Overlays — Arkade-
Algorithmen — Asymmetrische Fi-
guren und optische Mittelpunkte —
Kontrollprogramm — Kollisionen —
Ausblicke
49 NEUE bücher ey
Applesoft BASIC
Tips und Tricks
von Frank Bühler
1985, 244 S., kart., DM 38.-
Hüthig Verlag, Heidelberg
Dieses Buch ist für den Anfänger
und Fortgeschrittenen gleicherma-
Ben nutzbar. Neben einer Einfüh-
rung in die Programmiersprache
BASIC, die für den Einstieg aus
einer anderen Sprache ausrei-
chend sein dürfte, werden alle Ap-
plesoft-Befehle mit entsprechen-
den Beispielen aufgeführt.
Darüber hinaus bietet das Buch
einige Programmbeispiele mit z.T.
kleineren Assembler-Routinen
(deren Eingabe in den Rechner lei-
der nicht erklärt wird), die dann in
eigene Programme aufgenommen
werden können. Am Ende folgen
einige Tips zur Entwicklung von ef-
fizienten Applesoft-Programmen.
Im Anhang findet der Leser noch
einmal Tabellen mit Fehlermeldun-
gen, 6502-Befehlssatz und nützli-
che Adressen.
Inhalt
Applesoft-Basic im Vergleich —
Grundelemente von Basic — Ap-
plesoft-Befehlssatz — Rechenope-
rationen — Anwendungs- und Pro-
grammbeispiele — Programment-
wicklung/Hinweise — Anhang
dBase Il
Bd. 2: Programmierung
von W. Eggerichs
1985, 191 S., zahlr. Abb., kart., DM
38,90
Hüthig Verlag, Heidelberg
Das Buch knüpft unmittelbar an
den Band 1 „Einführung“ an. Mit
seiner kurz-sachlichen Formulie-
rung hebt es sich wohltuend von
zahlreichen dBase-Büchern ab,
die weitschweifend wenig Informa-
tion pro Seite bieten.
An den kleinen Beispielen werden
die grundlegenden Befehle zum
Programmieren in dBase erklärt.
Zur grafischen Darstellung wird
das Struktogramm gewählt (auf
den wesentlich unübersichtliche-
ren PAP verzichtet der Autor zu
Recht). Abschließend wird eine
vollständige Anwendung zur Ver-
waltung von Kundenstammdaten
wiedergegeben, die der Leser
leicht seinen eigenen Wünschen
anpassen kann.
69
70
In Vorbereitung
Aufsätze
Dos-Mover
Erhöhung der Speicher-
kapazität um 30%
(DOS 3.3)
Binäres Rechnen mit
Papier und Bleistift
Teil 1: Addition und Subtraktion
(Grundlagen)
Matrizenrechnung in der
betriebswirtschaftlichen Praxis
(Praxis)
Der IEC-Bus
(Hardware)
Serielle Schnittstellen beim
Apple IIc
(Hardware)
MAKESUB
Erstellung zusammenhängen-
der Subdirectories
(ProDOS)
Befehlserweiterung durch
CHRGET-Manipulation
(Applesoft)
Bildschirmmasken in der
Language-Card
(Assembler)
Dreidimensionale Funktions-
darstellung
(Grafik)
Dreiecksberechnung
(UCSD)
Readin von Integer-Zahlen
(UCSD)
Test- und Erfahrungs-
berichte
CP/M-3.0-Karte für Apple Ilc
(Semjan)
Premium-Softcard
Speicherverwaltung unter CP/M
(Microsoft)
FSS 280
Diskettenlaufwerk
(erphi electronic)
Prometric
65C02C- und Z80B-Rechner
(Electronic Special Service)
Microbuffer II
Druckerpuffer-Karte
(Practical Peripherals)
ML-192-Drucker
(Okidata)
SG-15-Drucker
(Star)
Mockingboard
Musik- und Sprachkarte
(Sweet Micro Systems)
Multi-Disk-Catalog Ill
Diskettenverwaltung
(Sensible Software)
DCODE
Applesoft-Hilfsprogramme
(Beagle Brothers)
Apple- und Peeker-Händler
Den „Peeker“ gibt es bei folgenden Apple-Händlern:
Beso GmbH, Oswaldstr. 5, 4700 Hamm 4
Böhmer Electronic, Wilhelm-Zopf-Str. 9, 7080 Aalen
Büro Plan Klaus Bayerl, Bochumer Str. 22, 4270 Dorsten
City Computer, Dönhoffstr. 23, 5090 Leverkusen
Computerland, Am Wall 137, 2800 Bremen 1
Delta-Electronic, Gugelmattstr. 31, Ch-8967 Widen
DMS Büroorganisation GmbH, Schwimmbadstr. 36,
6301 Heuchelheim
Günther Heinicke GmbH, Postfach 80 04 26, 2050 Hamburg 80
Horten Warenhaus, 1 N 7, 2a, 6800 Mannheim
Norbert Hunstig, Nottulner Landweg 81, 4400 Münster
Karstadt AG, Kampstr. 1, 4600 Dortmund 1
Kaut-Bullinger & Co. GmbH, Rosenstr. 8, 8000 München 8
Josef Kraus, Darmstädter Str. 26, 6148 Heppenheim
Microland-Computer GmbH, Bäringer Str. 31, 3380 Goslar
Mittelrheinisches Rechenzentrum GmbH, Postf. 128, 5160 Düren
Novocomp Datensysteme GmbH, Walramsneustr. 7 u. 9, 5500 Trier
Orgasoft GmbH, Graneggstr. 43, 7732 Niedereschach
Pandassoft, Uhlandstr. 195, 1000 Berlin 12
R+R Electronic, Breslauerstr. 29, 6900 Heidelberg 1
Schöpp GmbH, Bahnstr. 79, 6140 Bensheim
Staehlin-Büroorganisation, Klostersteige 12-14,
8960 Kempten / Allgäu
Wagner Datentechnik, Hochstr. 1, 7990 Friedrichshafen
Würth Bürobedarf + Organisation GmbH, Am Rupertsberg 16,
6530 Bingen 1
Sammeldisk #13
QUICK.RANDOM (Heft 1/86, S. 6ff.)
QUICK.SPEZIAL
QUICK.TASC
QUICK.DISK
QUICKSORT.DEMO (Heft 1/86, S. 16ff.)
T.QUICKSORT
QUICKSORT
VOK.TRAINER (Heft 1/86, S. 20ff.)
VOK.COPY
VOK.PACK
VOK.BCOPY
GWS.INFO
GWS.VOK
AGE.DEMO (Heft 1/86, S. 30ff.)
T.AGE
AGE
GRAFIK.DEMOS.2 (Heft 1/86, S. 61ff.)
Achtung!
Wegen der riesigen deutsch-englischen Übungsdatei
GWS.VOK zum Vokabeltrainer müssen die nachfolgenden
Programme aus Heft 1/86 auf die Sammeldisk #14 über-
nommen werden, die im übrigen die Programme aus Heft
2/86 enthalten wird.
T.PROTODOS (Heft 1/86, S. 36ff.)
PROTODOS
DESIGNER.TEXT (Heft 1/86, S. 43ff.)
READPAS.PAS (Heft 1/86, S. 48ff.)
Inserentenverzeichnis Peeker 1/86
aaa electronic gmbh, Freiburg
ACS, Detmold
AFC Computer GmbH, Köln
Ampersand (vorm. Pandabooks), Berlin .
ccp-datentechnik, Hamburg .
Ingenieurbüro Fricke, Berlin .
GEPARD Computer GmbH, Oldenburg .
HIB Computerladen, Nürnberg .
N. Hunstig, Münster
Interkom electronic, Isernhagen
Intus, Waldshut-Tiengen .
Jeschke, Kelkheim .
U. Mohwinkel Electronic, Leverkusen
Pandasoft, Berlin
M. Semjan Computer Systeme, Frankfurt
Tewi-Verlag, München
Ueding electronics, Menden
35
15
23
41
23
13
23
14
15
18
23
23
13
93
Peeker 1/86
LE
„Apple Assembler” wendet sich an alle,
die bereits Anfängerkenntnisse der
6502-Programmierung haben und
nunmehr ein Nachschlagewerk für
ihren Apple II Plus /lle/llc suchen, in
dem alle wichtigen ROM-Routinen
sowie eine Vielzahl sonstiger Hilfspro-
gramme in einer systematischen Form
zusammengestellt werden. Insgesamt
umfaßt dieses Buch über 40 Utilities,
darunter mehrere völlig neuartige Pro-
gramme wie Double-Lores, Double-
Hires, Screen-Format u. a.
Der erste Teil enthält ein Repetitorium
der wichtigsten Befehle, Adressie-
rungsarten und sonstigen Besonderhei-
ten des 6502 sowie Angaben zu den
apple-spezifischen Zahlenformaten
(Integer- und Fließkommazahlen).
Im zweiten Teil werden neben einer
Kurzwiederholung der Monitor-Befehle
alle Routinen und Adressen des Moni-
tors zusammengestellt, die für Assem-
blerprogrammierer von Nutzen sein
können. Darüber hinaus findet der
Leser Unterroutinen für Vorwärts- und
Rückwärts-Moven, hexadezimale Addi-
tion /Subtraktion /Multiplikation /Divi-
sion, Binär-, Hex-und ASCII-
Hüthig-FACHBUCH-TIP
PS
und Tricks
Mit ausführlichen x
Programmbeispielen
Ulrich Stiehl
Bis
Umwandlung, Dumpen /Disassemblie-
ren, Aufwärts-Scrollen, Reset u. a.
Der dritte Teil befaßt sich mit der Spei-
cherverwaltung der Language-Card
und der Il e-64K-Karte und enthält Test-
und Move-Programme zum Verschie-
ben von Daten in die und aus der
Language Card sowie der 64K-Karte,
wobei besonders ausführlich auf die
Softswitches eingegangen wird.
Der vierte Teil ist dem Applesoft-ROM
gewidmet und beschreibt die interne
Struktur von Applesoft-Programmen,
die Methoden der Parameterübergabe
mittels CALL, USR, &, PEEK und POKE
und listet dann eine große Anzahl nütz-
Apple Assembler
- Tips und Tricks -
von U. Stiehl
232 S., 40 Programm-Listings,
3 Abb., kart., DM 34,—
ISBN 3-7785-1047-9
Begleitdiskette zum Buch DM 28,—
ISBN 3-7785-1048-7
licher Interpreter-Adressen. Bei den se &
Utility-Programm liegt das Schwerge- 67 Re
wicht auf Fließkommamathematik ein- DEE
schließlich Print Using. Pd ? 5°
Der letzte Teil behandelt den Text- und ® RSS
Grafikspeicher. Neben einem profes- 9 LERNEN
sionellen Maskengeneratorprogramm & KR =
findet der Leser hier auch erstmals
Routinen zur Double-Lores- und
Double-Hires-Grafik des Apple Ile.
In Vorbereitung
TurtleGraphics-Library-Paket
*& Listbir Volumes
ER uyr.. er
und Apple-Maus in einfacher
und doppelter Hires-Grafik für
Pascal 1.1/1.2 auf Apple II+/e/c
mit Maus oder Joystick.
2 Disketten mit umfangreichem
Manual, DM 98,—
Erscheinungstermin Anfang 1986
5 Files 208 Ik, TE
EUTTERDEI TE) TEXT
> Desktop
Filename: DESKTOP
5
:
23
3
2
2
R
£
2
IMIHNNSICLHDhIL
m. w) u
Das Utility-Paket besteht aus vier Modulen, die von Programmierern-benutzt werden können, um
professionelle grafische Anwendungsprogramme in Pascal zu schreiben.
Benötigt wird ein Apple Pascal Betriebssystem, entweder die Version 1.1 oder die neue Version
1.2. Bestehende Programme laufen ohne Einschränkung mit der neuen „TurtleGraphics“, wenn
diese nicht zu viel Speicherplatz verbraucht haben, da die neue „TurtleGraphics“ umfangreicher
als die alte ist.
Im einzelnen bietet das Paket folgende Möglichkeiten:
— volle Kompatibilität mit der alten „TurtleGraphics“
— lauffähig auf Pascal 1.1 und 1.2
— funktionsfähig mit angeschlossener UltraTerm-Karte
— alle zeitkritischen Funktionen in reinem Assembler programmiert
— Benutzung der zweiten Hires-Seite ($4000-$5FFF) möglich
— für Apple IIc und Apple Ile mit erweiterter 80-Zeichen-Karte Benutzung der doppelten Hires-
Grafik mit 560 x 192 Punkten bzw. 16 neuen Farben möglich
— schnelle Prozeduren zum Zeichnen eines Punktes oder einer Linie
— Linearisierung von Teilen des Hires-Schirms
— Benutzung mehrerer Zeichensätze gleichzeitig
— Laden und Speichern von Hires-Bildern mit Ausdruck über Pascal-SUPERDUMP
— Scrolling des Hires-Schirms oder eines Teils in vier Richtungen
— drei verschiedene Schriftarten: Fett-, Breit- und Proportionalschrift, beliebig mischbar
(acht Möglichkeiten)
— spezielle schnelle Ausgabe von Text
— Cursor bei Eingabe frei programmierbar
— Ein-/Ausgabe von INTEGER-, CHAR-, STRING- und REAL-Werten im Grafikmodus
— Menüzeile wie beim Macintosh (Die nachfolgenden Module benötigen Maus/Joystick)
— Pull-down-Menüs
— Laden und Speichern von Fenstern (Windows)
— Öffnen von Fenstern
— Aktivieren und Deaktivieren von Fenstern
— Verschieben und Vergrößern/Verkleinern von Fenstern
— Scrolling von Fensterinhalten in allen vier Richtungen
— Umfangreiche Demos als Quelltexte.
Hüthig Software Service - Postfach 102869 - 6900 Heidelberg